zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言经典算法 11-20

2023-09-11 14:15:52 时间

十一、求最大公约数和最小公倍数

题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。

程序分析:利用辗除法。

代码如下:

#include<stdio.h>
int main(void)
{
	int a,b;
	int m,n;//m存放最大公约数n存放最小公共倍数
	int temp=0;
	int i=0;
	scanf("%d %d",&a,&b);
	n=a*b;
	if(a>=b)
	{
		temp=a%b;
		while(temp)
		{
			a=b;
			b=temp;
			temp=a%b;
		}
		m=b;//最大公约数
	}
	else
	{
		temp=b%a;
		while(temp)
		{
			b=a;
			a=temp;
			temp=b%a;
		}
		m=a;//最大公约数
	}
	n=n/m;//最小公倍数
	printf("%d %d\n",m,n);
	return 0;
}

十二、统计字符串数字,字母,符号的各个数量

题目:输入一行字符,分别统计出其中英文字母、数字和其它字符的个数。

代码如下:

#include<stdio.h>
#include<string.h>
int main(void)
{
	int i;
	int word=0;//统计字母数
	int number=0;//统计数字数
	int fuhao=0;//统计符号数
	char a[200];
	scanf("%s",a);
	for(i=0;i<strlen(a);i++)
	{
		if( ( a[i]>='a' && a[i]<='z' ) || ( a[i]>='A' && a[i]<='Z' ))
		{
			word++;
			continue;
		}
		if(a[i]>='0'&&a[i]<='9')
		{
			number++;
			continue;
		}
        fuhao++;
	}
	printf("字符串总长度为:%d\n",strlen(a));
	printf("共有%d个字母\n",word);
	printf("共有%d个数字\n",number);
	printf("共有%d个符号\n",fuhao);
	return 0;
}

十三、2+22+222+…

题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。
例如 2+22+222+2222+22222(此时 共有 5 个数相加),几个数相加有键盘控制。

程序分析:关键是计算出每一项的值。 

代码如下:

方法一: 
#include<stdio.h>
void main()
{
	int a,n,count=1;
	long int sn=0,tn=0;
	printf("please inputaand n\n");
	scanf("%d,%d",&a,&n); 
	printf("a=%d,n=%d\n",a,n); 
	while(count<=n) 
	{ 
		tn=tn+a;
		sn=sn+tn;
		a=a*10;
		++count; 
	} 
	printf("a+aa+...=%ld\n",sn);


方法二:
#include<stdio.h>
int main(void)
{
	int a,n;
	int sum=0;
	int b=0;
	int i=0;
	printf("请输入a的值:");
	scanf("%d",&a);
	printf("请输入n的值:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		
		b=b*10;
		b=b+a;
		sum=sum+b;
	}
	printf("%d\n",sum);
	return 0;
}

十四、完数

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=123.
编程 找出 1000 以内的所有完数。 

程序分析:何判断素数有点像,不过它是要把因子加一块

代码如下:

#include<stdio.h>
void main()
{
	int i,j,k;
	for(i=1;i<=1000;i++)
	{
		k=0;
		for(j=1;j<=i-1;j++)
		if(i%j==0)
			k+=j;
		if(k==i)
		printf("%d\n",i);
	}
}  

十五、小球反弹问题

题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,
求它在 第 10次落地时,共经过多少米?第 10 次反弹多高? 

代码如下:

#include<stdio.h>
void main()
 { 
	float sn=100.0,hn=sn/2;
	int n; 
	for(n=2;n<=10;n++)
	{ 
		sn=sn+2*hn;/*第 n 次落地时共经过的米数*/ 
		hn=hn/2;/*第 n 次反跳高度*/ 
	} 
	printf("thetotalof road is %f\n",sn); 
	printf("thetenthis %fmeter\n",hn);
 } 

十六、猴子吃桃问题

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。
到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 

程序分析:采取逆向思维的方法,从后往前推断。 

代码如下:

#include<stdio.h>
void main()
{ 
	int day,x1,x2; 
	day=9; x2=1;
	while(day>0)
	{
		x1=(x2+1)*2;/*第一天的桃子数是第 2 天桃子数加 1 后的 2 倍*/
		x2=x1;
		day--; 
	} 
	printf("thetotalis %d\n",x1); 
} 

十七、求一个分数序列的和

题目:有一分数序列:2/13/25/38/513/821/13...
求出这个数列的前 20 项之和。 

程序分析:请抓住分子与分母的变化规律。 

代码如下:

#include<stdio.h>
void main()
 { 
	int n,t,number=20;
	float a=2,b=1,s=0; 
	for(n=1;n<=number;n++)
	{ 
		s=s+a/b; 
		t=a;
		a=a+b;
		b=t;/*这部分是程序的关键*/ 
	} 
	printf("sum is %9.6f\n",s);
 }

十八、求 1+2!+3!+…+20!的和

题目:求 1+2!+3!+...+20!的和 
程序分析:先累乘再累加

代码如下:

#include<stdio.h>
void main() 
{ 
	float n,s=0,t=1;
	for(n=1;n<=20;n++)
	{ 
		t*=n; 
		s+=t;
	} 
	printf("1+2!+3!...+20!=%e\n",s);
 } 

十九、给你一个多位数 输出每一位数

题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,
二、逆序打印出各位数字。 

程序分析:学会分解出每一位数。

代码如下:

#include<stdio.h>
void main( ) 
{ 
	long a,b,c,d,e,x;
	scanf("%ld",&x);
	a=x/10000;/*分解出万位*/
	b=x%10000/1000;/*分解出千位*/ 
	c=x%1000/100;/*分解出百位*/
	d=x%100/10;/*分解出十位*/ 
	e=x%10;/*分解出个位*/ 
	if(a!=0) 
		printf("thereare5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
	else if (b!=0)
		printf("there are 4,%ld %ld %ld %ld\n",e,d,c,b);
	else if (c!=0)
		printf(" thereare3,%ld %ld %ld\n",e,d,c); 
	else if (d!=0)
		printf("there are 2,%ld %ld\n",e,d); 
	else if (e!=0)
		printf(" thereare1,%ld\n",e); 
}

二十、回文数

题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位与千位相同。

代码如下:

#include<stdio.h>
void main( )
{ 
	long ge,shi,qian,wan,x;
	scanf("%ld",&x);
	wan=x/10000;
	qian=x%10000/1000; 
	shi=x%100/10; 
	ge=x%10;
	if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/ 
		printf("this number is ahuiwen\n");
	else
		printf("this number is not ahuiwen\n"); 
} 

C语言经典算法 1-10点击跳转

C语言经典算法 21-30点击跳转