BUPT2021秋季计算导论第六次实验

BUPT2021秋季计算导论第六次实验

最大公约数和最小公倍数

实验3_13_最大公约数和最小公倍数 (100 分)
已知两个正整数m和n,求其最大公约数和最小公倍数。

输入格式:
两个用空格分隔的正整数m和n。

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

输入样例:
12 36
输出样例:
12 36
这是一种简单的代码,老师上课教我们的写法。

#include<stdio.h>
int main()
{    
int M,N,m,n;    
int t = 0;    
scanf("%d %d",&M,&N);    
m = M;    
n = N;    
while(n!=0)    
{        
t = m%n;        
m = n;        
n = t;    
}    
printf("%d %d",m,M/m*N);       
return 0;
}

这是一个比较复杂的写法

#include<stdio.h>
int Factor ( int , int );
int Mult ( int , int);
int main()
{
	int m ,n ;
	scanf("%d %d", &m , &n);
	int a,b;
	a= Factor ( m , n);
	b= Mult ( m ,n );
	printf("%d %d\n", a, b);
	return 0 ;
}



int Factor ( int m , int n )
{
	int p;
	if(m > n)
		{
		    p = n;	
		}
		else {
			p = m;
		}
	int j ;
	int factor = 1;
	for ( j = 1; j <= p ; j++)
	    {
	    	if((m % j == 0)&&(n %j ==0))
	    	{
	    		if (j >= factor )
	    			{
	    				factor = j;
					}
			}
		}
	return factor;
}


int Mult ( int m , int n)
{
	int i ;
	if (m>n)
		{
			i = m;
		}
		else {
			i = n;
		}
	int j ;
	int mult = 1; 
	for ( j = i ;j<= m* n; j++)
		{
			if(( j % m == 0)&&( j % n ==0))
				{
				  	mult = j;
				  	break;
				}
		}
	return mult ;
}

韩信点兵实验

4_1_韩信点兵 (100 分)
韩信有一队兵,他想知道一共有多少人,便让士兵排队报数。站5人一排,多出1人;站6人一排,多出5人站;67人一排,多出6人;站11人一排,多出10人。问韩信至少有多少兵?

输入格式:
为一个整数n(0<n<10000)。

输出格式:
一个不小于n的整数,为韩信可能拥有兵的数量的最小值。

输入样例:
200
输出样例:
461
我采用的是笨方法,从小开始递增,直到找出第一个符合要求的数,也就是最小数,

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int j ;
	for ( j = n ; ; j++)
		{
			if((j-1)%5==0)
				{
					if((j-5)%6==0)
						{
							if((j-6)%7 ==0)
								{
									if((j-10)%11 ==0)
										{
											printf("%d", j);
											break;
										}
								}
						}
				}
		}
	return 0;
}

回文数

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

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

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

输入样例:
12321
输出样例:
Yes

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

进制转换一

在这里插入图片描述
输入格式:
为一个只包含0和1的整数n(长度不超过10位),代表二进制数。

输出格式:
为转换得到的十进制数。

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

31

#include<stdio.h>
int main()
{
	int n ;
	scanf("%d", &n);
	int j ;
	int num = 0 ;
	int t = 1;
	while ( n != 0)
		{
		   j = n % 10 ;
		   num = num + j * t;
		   t= t*2;
		   n = n /10 ;
	    }
	printf("%d\n", num);
	return 0;
}

求幂值

在这里插入图片描述
输入格式:
只有一个浮点数x,即代表e
x
中的指数x,且x满足x<=20。

输出格式:
只有一个浮点数,即e
x
的值,保留4位小数。

输入样例:
3.7
输出样例:
40.4473

#include<stdio.h>
#include<math.h>
int main()
{
	double num ;
	scanf("%lf",&num);
	double sum = 1.0000;
	double j = 1.0000;
	double factor = num / j;
	double temp ;
	while(fabs(factor)>1e-8)
		{
		    sum = sum + factor ;
		    j ++;
		    temp = num / j;
			factor = factor * temp ;	
			//printf("%lf ", j);
			//printf("%lf  ", temp);
		}
	printf("\n");
	printf("%.4lf\n",sum);
	printf("%.4lf\n",exp(num));
	return 0;
}

圆的切分

实验4_2_圆的切分 (100 分)
在一个平面上有一个圆和n条直线,这些直线中每一条在圆内同其他直线相交,假设没有3条直线相交于一点,试问这些直线将圆分成多少区域。 c.jpg

输入格式:
只有一个整数n(0<=n<100)。

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

输入样例:
1
输出样例:
2

#include<stdio.h>
int main()
{
	int n,r;
	scanf("%d",&n);
	r=(n*n+n)/2+1;
	printf("%d\n",r);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影不在遗忘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值