bupt2024大一上计导迭代算法练习

7-23 实验3_6_打印图形一

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

用’-‘(减号)、’+’(加号)、’|’(竖线)、’*’星号和空格打印方格。

输入格式:

只有一行,为用空格分隔的两个整数l,c(0<l,c<10)。其中l和c分别代表格子的行数和列数。请看输入样例。

输出格式:

每组测试用例输出一组(请看输出样例)。

输入样例:

2 3

输出样例:

|*****|*****|*****|
|  |  |  |  |  |  |
|--+--|--+--|--+--|
|  |  |  |  |  |  |
|*****|*****|*****|
|  |  |  |  |  |  |
|--+--|--+--|--+--|
|  |  |  |  |  |  |
|*****|*****|*****|

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
void one(int n,int j)
{
	printf("|*****");
	if(j==n-1)
	printf("|\n");
}
 
void two(int n,int j)
{
	printf("|  |  ");
	if(j==n-1)
	printf("|\n");
}
 
void three(int n,int j)
{
	printf("|--+--");
	if(j==n-1)
	printf("|\n");
}
 
int main()
{
	void one(int n,int j);
	void two(int n,int j);
	void three(int n,int j);
	int m,n;
	scanf("%d %d",&m,&n);
	int i,j,k;
	for(i=0;i<=m;i++)
	{
		for(k=0;k<4;k++)
		{
			for(j=0;j<n;j++)
			{
				if(k==0)
				{
					one(n,j);
				}
				else if((k==1||k==3)&&i<m)
				{
					two(n,j);
				}
				else if(k==2&&i<m)
				{
					three(n,j);
				}
			}
		}
	}
	return 0;
}

7-24 实验3_7_数字拆分

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个正整数n,n的范围是1—999999999。你的任务是把这个整数分解为单个数字,然后从左至右依次打印出每一个数字。例如将整数“12345”分解,得到“1 2 3 4 5”。

输入格式:

只有一个正整数。测试用例保证合法。

输出格式:

只有一行,为输入整数的拆分结果,相邻两个数字之间有一个空格,最后一个数字后是换行符。例如12345的拆分结果为:1 2 3 4 5。

输入样例:

12345

输出样例:

1 2 3 4 5

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int main()
{
	long x;
	long sum=0;
	scanf("%ld",&x);
	if(x%10==0)
	{
		int t=0;
		while(x%10==0)
		{
			x=x/10;
			t++;
		}
		while(x>0)
		{
			sum=sum*10+x%10;
			x=x/10;
		}
		while(sum>0)
		{
			printf("%ld ",sum%10);
			sum=sum/10;
		}
		while(t>1)
		{
			printf("0 ");
			t--;
		}
		printf("0\n");
	}
	else
	{
		while(x>0)
		{
			sum=sum*10+x%10;
			x=x/10;
		}
		while(sum>9)
		{
			printf("%ld ",sum%10);
			sum=sum/10;
		}
		printf("%ld\n",sum);
	}
	return 0;
}

7-25 实验3_8_位数对调

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个正整数n(可以用int存储),你的任务是将n的最低位与最高位上的数字对调,次低位与次高位上的数字对调,以此类推,直到中间位。最后得到一个新整数并将新的数字输出。需要注意的是:如果当最低位数字与最高位数字对调后,数字的长度变短(也就是最低位为0),则不能对这个数进行位数对调处理。

输入格式:

只有一个正整数,即n。

输出格式:

当n可以进行数字对调时,例如n=123,你应输出“321”;当n不可以进数字对调时,例如n=980,你应输出“The number cannot be changed.”。

输入样例:

1365

输出样例:

5631

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int main()
{
	int x;
	int sum=0;
	scanf("%d",&x);
	if(x%10==0)
	{
		printf("The number cannot be changed.");
	}
	else
	{
		while(x>0)
		{
			sum=sum*10+x%10;
			x=x/10;
 
		}
		printf("%d",sum);
	}
	return 0;
}

7-26 实验4_3_回文数

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

回文是指正读和反读都一样的数或文本段。例如,12321、55555、45554、11611都是回文数。输入一个长度不超过10位的整数n,判断它是否是回文数。

输入格式:

只有一个整数n,即待判断的数字。测试用例保证n可以用int存储。

输出格式:

当n为回文数时输出“Yes”,否则输出“No”。

输入样例:

12321

输出样例:

Yes

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int main()
{
	int x;
	scanf("%d",&x);
	int i=x,y=0;
	while(i>0)
	{
		y=y*10+i%10;
		i=i/10;
	}
	if(x==y)
	printf("Yes");
	else
	printf("No");
	return 0;
}

7-27 实验3_10_同构数

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

所谓“同构数”是指这样的数,它出现在它的平方数的右边,例如5的平方数是25, 25的平方数是625,所以5和25都是同构数。你的任务是判断整数x是否是同构数。若是同构数,输出“Yes”,否则输出“No”。x的取值范围是(1<=x<=10000),如果输入的x不在允许范围内,则输出错误提示信息“x out of range”。

输入格式:

只有一个整数。测试用例保证所有输入可以用int存储。

输出格式:

只有一行,为判断结果。

输入样例:

20000

输出样例:

20000 out of range

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int main()
{
	int x,z;
	long y;
	int i=1;
	scanf("%d",&x);
	if(1<=x&&x<=10000)
	{
		y=x*x;
		while(x/i!=0)
		{i=i*10;
		}
		z=y%i;
		if(x==z)
		printf("Yes");
		else
		printf("No");
	}
	else
	{
		printf("%d out of range",x);
	}
	return 0;
}

7-30 实验3_13_最大公约数和最小公倍数

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知两个正整数m和n,求其最大公约数和最小公倍数。

输入格式:

两个用空格分隔的正整数m和n。

输出格式:

只有一行,为两个用空格分隔的正整数,依次代表m和n的最大公约数和最小公倍数。测试用例保证m、n及其最小公倍数可以用int存储。

输入样例:

12 36

输出样例:

12 36

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int max(int x,int y)
{
	int w;
	
	if(y==1||y==0)
	return y;
	else
	{
		if((x%y)==0)
		{	
			w=y;
		}
        else{
		w=max(y,x%y);
		}
	}
	return w;
}
 
int min(int x,int y,int m)
{
	int n;
	n=y/m;
    n=n*x;
	return n;
}
 
int main()
{
	int max(int x,int y);
	int min(int x,int y,int m);
	int x,y,m,n;
	int t;
	scanf("%d %d",&x,&y);
	if(x<y)
	{
		t=x;
		x=y;
		y=t;
	}
	m=max(x,y);
	n=min(x,y,m);
	printf("%d %d",m,n);
	return 0;
}

7-32 实验4_2_圆的切分

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

在一个平面上有一个圆和n条直线,这些直线中每一条在圆内同其他直线相交,假设没有3条直线相交于一点,试问这些直线将圆分成多少区域。

c.jpg

输入格式:

只有一个整数n(0<=n<100)。

输出格式:

只有一个整数,为圆被n条直线分成的区域的块数。

输入样例:

1

输出样例:

2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int x=1,i=0;
	for(i=0;i<=n;i++)
	{
		x=x+i;
	}
	printf("%d",x);
	return 0;
}

7-34 实验4_4_进制转换一

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知一个只包含0和1的二进制数,二进制数的长度不大于10。你的任务是将其转换为十进制数并打印出来。
提示:用除法和求余运算每次从右到左获取二进制整数的各位数字。在十进制数值系统中,最右边的数字是个位,个位的左边依次是十位、百位、千位等等。与之类似,在二进制数值系统中,最右边的数字是1位,左边的数字依次为2位、4位、8位等等。十进制数234可分解为4*100+3*101+2*102,二进制数1101可分解为1*20+0*21+1*22+1*23,它等价于十进制数1+0+4+8,即13。

输入格式:

为一个只包含0和1的整数n(长度不超过10位),代表二进制数。

输出格式:

为转换得到的十进制数。

输入样例:

11111

输出样例:

在这里给出相应的输出。例如:

31

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int change(int x)
{
	int sum=0;
	if(x==1||x==0)
	return x;
	else
	{
		sum=x%2+change(x/10)*2;
	}
	return sum;
}
 
 
int main()
{
	int x,y;
	int change(int x);
	scanf("%d",&x);
	y=change(x);
	printf("%d",y);
	return 0;
}

7-9 高空坠球

分数 20

全屏浏览

切换布局

作者 C课程组

单位 浙江大学

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:

在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

注意:n为 0 时表示球未开始下落。

输入样例:

33 5

输出样例:

94.9 1.0

鸣谢中山职业技术学院邱维阳老师完善题面。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <math.h>
int main()
{
    int h, n;
    double sum = 0, height = 0;
    int i;
    scanf("%d %d", &h, &n);
    for (i = 1; i <= n; i++)
    {
        if (i == 1)
            sum += h;
        else
            sum += 2 * height;
        height = h / pow(2, i);
    }
    printf("%.1f %.1f\n", sum, height);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值