栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言经典算法题

C/C++/C# 更新时间:发布时间: 百科书网 趣学号

maintainer:小支

一、数位分离 1、水仙花数(153):水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
#include 
int main()
{
	int i=0,g=0,s=0,b=0;
	for(i=100;i<1000;i++)
	{
		g=i%10;
		s=i/10%10;
		b=i/100;
		if(g*g*g+s*s*s+b*b*b==i)
			printf("%dn",i);
	}
	return 0;	
}
2、同构数:正整数n若是它平方数的尾部,则称n为同构数。例如:5的平方数是25
#include 
int main()
{
	int i=0,g=0;
	for(i=1;i<100;i++)
	{
		g=i%10;
		if(g*g==i)
			printf("%dn",i);
	}
	return 0;	
}
3、各位数加起来和为7
#include 
int main()
{
	int i=0,g=0,s=0,b=0;
	for(i=100;i<1000;i++)
	{
		g=i%10;
		s=i/10%10;
		b=i/100;
		if(g+s+b==7)
			printf("%dn",i);
	}
	return 0;	
}
4、输出能被3整除且个位数为6的数
#include 
int main()
{
	int i=0,t=0;
	for(i=0;i<10;i++)
	{
		t=i*10+6;
		if(t%3==0)
			printf("%dn",t);
	}
	return 0;	
}
5、完数:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 找出1000以内的所有完数
#include 
int main()
{
	int i=0,j=0,s=0;
	for(i=1;i<=1000;i++)
	{
		s=0;
		for(j=1;j 
6、设计一个程序可以实现以下功能:寻找以下特征的四位正整数,其百位数为0,去掉百位数0可得到一个三位正整数,而该三位正整数乘以9等于原四位正整数。如6075=675*9。 
#include 
int main()
{
	int i=0,t=0;
	for(i=1000;i<10000;i++)
	{
		if(i/100%10!=0)
			continue;
		t=i/1000*100+i%100;
		if(t*9==i)
			printf("%dn",i);
	}
	return 0;	
}
7、回文数
#include 
int main()
{
	int i=0,t=0,n=0;
	scanf("%d",&i);
	t=i;
	do
	{
		n=n*10+t%10;
		t/=10;
	}while(t);
	if(n==i)
		printf("是回文");
	return 0;	
}
8、"-1234"到数字-1234
#include 
int main()
{
	char s[]="-1234",*p=s;
	int flag=0,num=0;
	if(*p=='-')
	{
		p++;flag=1;	
	}
	while(*p!='')
	{
		num=num*10+*p-'0';
		p++;
	}
	if(flag)
		num=-num;
	printf("%d",num); 
	return 0;
}
二、求和 1、1+1+2+1+2+3+1+2+3+4…+1+2+3+4+…+100
#include 
int main()
{
	int i=0,j=0,sum=0;
	for(i=1;i<=100;i++)
	{
		for(j=1;j<=i;j++)
			sum+=j;
	}
	printf("%d",sum);
	return 0;
}
2、1+12+123+…+123456789
#include 
int main()
{
	int i=0;
	long j=1,sum=0;
	for(i=1;i<=9;i++)
	{
		sum+=j;
		j=j*10+(i+1);
	}
	printf("%ld",sum);
	return 0;
}
3、1+22+33+…+999999999
#include 
int main()
{
	long i=0,j=0,t=0,sum=0;
	for(i=1;i<=9;i++)
	{
		t=0;
		for(j=1;j<=i;j++)
			t=t*10+i;
		sum+=t;
	}
	printf("%ld",sum);
	return 0;
}
4、6+66+666+…+666666666
#include 
int main()
{
	long i=0,t=0,sum=0;
	for(i=1;i<=9;i++)
	{
		t=t*10+6;
		sum+=t;
	}
	printf("%ld",sum);
	return 0;
}
5、1*2+2*3+3*4+…+20*21
#include 
int main()
{
	int i=0,sum=0;
	for(i=1;i<=20;i++)
		sum+=i*(i+1);
	printf("%d",sum);
	return 0;
}
6、1/2+2/3+3/4…9/10
#include 
int main()
{
	float i=0.0,sum=0.0;
	for(i=1.0;i<=9;i++)
		sum+=i/(i+1);
	printf("%f",sum);
	return 0;
}
7、1-100的和
#include 
int main()
{
	printf("%d",100*(1+100)/2);  //5050
	return 0;
}
三、统计 1、统计’a’-'z’出现的次数
#include 
int main()
{
	char s[100];
	int i=0,count=0;
	gets(s);
	while(s[i]!='')
	{
		if(s[i]>='a'&&s[i]<='z')
			count++;
		i++;
	}
	printf("%d",count);
	return 0;
} 
2、统计年龄在16-31岁的人数
#include 
int main()
{
	int a[16]={0},n=0,i=0,t=0;
    printf("请输入要输入的学生的个数:");
	scanf("%d",&n);
	for(i=0;i
		scanf("%d",&t);
		if(t>=16&&t<=31)
			a[t-16]++;
	}
	for(i=0;i<16;i++)
		printf("%d岁的人数:%dn",i+16,a[i]);
	return 0;
}
3、统计分数在80-90分的人数
#include 
int main()
{
	int a[11]={0},n=0,i=0,t=0;
	printf("请输入要输入的学生的个数:");
	scanf("%d",&n);
	for(i=0;i
		scanf("%d",&t);
		if(t>=80&&t<=90)
			a[t-80]++;
	}
	for(i=0;i<11;i++)
		printf("%d分的人数:%dn",i+80,a[i]);
	return 0;
}
四、数组 1、逆序存放
#include 
int main()
{
	char s[]="hello",t=0,*p=s,*q=s+sizeof(s)-2;
	while(p
		t=*p;
		*p++=*q;
		*q--=t;
	}
	puts(s);
	return 0;
} 
2、简单排序
#include 
int main()
{
	int a[10]={8,5,9,2,3,4,6,8,4,0},i=0,j=0,t=0;
	for(i=0;i<10-1;i++)
		for(j=i+1;j<10;j++)
			if(a[i]>a[j])
			{
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
	return 0;
}
3、选择排序
#include 
int main()
{
	int a[10]={8,5,9,2,3,4,6,8,4,0},i=0,j=0,t=0,flag=0;
	for(i=0;i<10-1;i++)
	{
		flag=i;
		for(j=i+1;j<10;j++)
			if(a[flag]>a[j])
				flag=j;
		if(flag!=i)
		{
			t=a[i];
			a[i]=a[flag]; 
			a[flag]=t;
		}
	}
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
	return 0;
}
4、冒泡排序
#include 
int main()
{
	int a[10]={8,5,9,2,3,4,6,8,4,0},i=0,j=0,t=0;
	for(i=0;i<10-1;i++)
		for(j=0;j<10-i-1;j++)	
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
	return 0;
}
5、行列元素互换
#include 
int main()
{
	int a[3][3]={8,5,9,2,9,0,4,6,7},i=0,j=0,t=0;
	for(i=0;i<3;i++)
		for(j=i;j<3;j++)
		{
			t=a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=t;
		}	
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
			printf("%d ",a[i][j]);
		printf("n");
	}	
	return 0;
}
6、标记(例:将字符串的数字标记为T,字母标记为F)
#include 
int main()
{
	char s[]="12 xiaopeng yyds",a[100];
	int i=0;
	for(i=0;i
		if(s[i]>='0'&&s[i]<='9')
         	 a[i]='T';
         else if(s[i]>='a'&&s[i]<='z'&&s[i]>='A'&&s[i]<='Z')
			a[i]='F';
	}
	for(i=0;i 
7、数组左移、右移 
#include 
int main()
{
	char s[]="123456",*p=s,*q=s+sizeof(s)-2,t=0;
	t=*p;
	while(p
			*p=*(p+1);
			p++;
	}
	*q=t;
	puts(s); //234561
	return 0;
}
8、n 个学生的信息(包括学生的姓名、m门的成绩、住址)存储在一个结构体 数组 s 中,现需设计一个函数,统计学生各科成绩平均分的总和,并通过函数返回。
#include 
struct STU{
	char name[20];
	float score[10];
	char address[20];
};
double avg_fun(struct STU s[],int n,int m) //n名学生 m科成绩 
{
	int i=0,j=0;
	double avg=0.0,sum=0.0;
	for(i=0;i
		for(j=0;j	
			scanf("%f",&s[i].score[j]);
			avg+= s[i].score[j]/n;
		}
		sum+=avg;avg=0.0; 
	} 
	return sum;
}
int main()
{
	struct STU s[100];
	double avg=0.0;
	avg=avg_fun(s,3,3);
	printf("%lf",avg);
	return 0;
}
9、判断二维数组是否为对称数组
#include 
int main()
{
	int a[3][3]={8,5,9,2,9,0,4,6,7},i=0,j=0,flag=1;
	for(i=0;i<3;i++)
		for(j=i;j<3;j++)
			if(a[i][j]!=a[j][i])
			{
				flag=0;
				break;
			}	
	if(flag)
		printf("是对称数组");
	else
		printf("不是对称数组"); 
	return 0;
}
10、二维数组最大值及下标
#include 
int main()
{
	int a[3][3]={59,100,9,5,4,3,600,11,15};
	int i=0,j=0,imax=0,jmax=0;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			if(a[i][j]>a[imax][jmax])
				{
					imax=i;
					jmax=j;
				}
	printf("max=%d,行下标:%d,列下标:%d",a[imax][jmax],imax,jmax);
	return 0;
}
11、杨辉三角
#include 
int main()
{
	int a[10][10]={0},i=0,j=0;
	for(i=0;i<10;i++)
		a[i][0]=a[i][i]=1;
	for(i=2;i<10;i++)
		for(j=1;j
		for(j=0;j<=i;j++)
		{
			printf("%d  ",a[i][j]);
		}
		putchar('n');
	}
	return 0;
}
12、二维数组存放在一维数组里
#include 
int main()
{
	int a[3][3]={59,100,9,5,4,3,600,11,15};
	int b[9],i=0,j=0,k=0;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			b[k++]=a[i][j];
	for(k=0;k<9;k++)
		printf("%d ",b[k]);
	return 0;
}
五、字符数组 1、基本:输入输出
#include 
int main()
{
	char s1[10],s2[10];
	scanf("%s",s1);
	printf("%sn",s1);
	return 0;
}

#include 
int main()
{
	char s1[10],s2[10];
	gets(s2);
	puts(s2);	
	return 0;
}
2、字符串连接
#include 
void my_strcat(char *s1,char *s2) 
{
	while(*s1!='') 
		s1++;
	while(*s2!='')
		*s1++=*s2++;
	*s1='';
}
int main()
{
	char str1[50]="xiaopeng",str2[10]="yyds";
	my_strcat(str1,str2);
	puts(str1);  //xiaopengyyds
	return 0;
}
3、字符串复制
#include 
void my_strcpy(char *s1,char *s2) 
{
	while(*s2!='') 
		*s1++=*s2++;
	*s1='';
}
int main()
{
	char str1[50]="xiaopeng",str2[10]="yyds";
	my_strcpy(str1,str2);
	puts(str1);  //yyds
	return 0;
}

4、字符串比较
#include 
int my_strcmp(char *s1,char *s2) 
{
	while(*s1!=''&&*s2!='')
		if(*s1++!=*s2++)
			return *(s1-1)-*(s2-1);
	return 0;	
}
int main()
{
	char str1[50]="xiaopeng",str2[10]="yyds",result=0;
	result=my_strcmp(str1,str2);
	printf("%d",result); //-1
	return 0;
}
5、字符串有效长度
#include 
int my_strlen(char *s1) 
{
	int count=0;
	while(*s1++!='')
		count++;
	return count;	
}
int main()
{
	char str1[50]="xiaopeng",result=0;
	result=my_strlen(str1);
	printf("%d",result); //8
	return 0;
}
6、统计某类字符、删除某类字符(删除数字)
#include 
int main()
{
	char str1[50]="xia4345openg564365 yyds",*p,*q;
	for(p=q=str1;*p!='';p++)
		if(*p<'0'||*p>'9')
			*q++=*p;
	*q='';
	puts(str1); //xiaopeng yyds
	return 0;
}
7、回文字符串
#include 
int main()
{
	char str1[50]="xia4345openg564365 yyds",*p=str1,*q=str1;
	int flag=1;
	while(*q!='') 
		q++;
	q--;
	while(p
			flag=0;break;
		}
	if(flag)
		printf("是回文字符串");
	else
		printf("不是回文字符串");
	return 0;
}
8、重点:子串在主串中出现的次数
#include 
int main()
{
	char str1[50]="abnbcababaabaab",str2[]="ab";
	char *p,*t1,*t2;
	int count=0;
	for(p=str1;*p!='';p++)
	{
		for(t1=p,t2=str2;*t2!='';t1++,t2++)
			if(*t1!=*t2) 
				break;
		if(*t2=='')
			count++;
	}
	printf("%d",count);	//5
	return 0;
}
9、请设计一个程序,其功能为:自左至右取出非空字符串a中的所有数字字符,将这些数字字符组成一个十进制整数并输出,并输出取出所有数字字符后的其他字符。例如:字符串a为"ch20an4gch12un 2ro3ad",程序输出:“2041223"和"changchun road”
#include 
int main()
{
	char str1[50]="xia4345openg565 yyds",*p,*q;
	int a=0;
	for(p=str1,q=str1;*p!='';p++)
		if(*p>='0'&&*p<='9')
			a=a*10+*p-'0';
		else
			*q++=*p;
	*q=''; //xiaopeng yyds
	puts(str1);
	printf("%d",a); //4345565
	return 0;
}
六、函数 1、编写自定义函数 (1)编写函数让三个数从大到小输出(关键:地址传递)
#include 
void my_sort(int *a,int *b,int *c)
{
	int t=0;
	if(*a<*b)
	{t=*a;*a=*b;*b=t;}
	if(*a<*c)
	{t=*a;*a=*c;*c=t;}
	if(*b<*c)
	{t=*b;*b=*c;*c=t;}
}
int main()
{
	int a=10,b=30,c=20;
	my_sort(&a,&b,&c);
	printf("%d %d %d",a,b,c);
	return 0;
}
(2)编写函数对数组进行排序(关键:实参:数组名和长度)
#include 
void my_sort(int a[],int n)
{
	int i=0,j=0,t=0;
	for(i=0;ia[j+1])
			{
				t=a[j];a[j]=a[j+1];a[j+1]=t;
			}	
}
int main()
{
	int a[50],n=0,i=0;
	scanf("%d",&n);
	for(i=0;i 
(3)编写一个函数判断对称数组 
#include 
int dc(int n)
{
	int i=0,j=0,flag=1;
	for(i=0;i 
(4)编写一个函数求主串中子串的个数 
#include 
int Fun(char *s1,char *s2)
{
	int count=0;
	char *t1,*t2;
	while(*s1)
	{
		for(t1=s1,t2=s2;*t2!='';t1++,t2++)
			if(*t1!=*t2)
				break;
		if(*t2=='')
			count++;
		s1++;
	}
	return count;	
}
int main()
{
	printf("%d",Fun("abababbbab","bab")); //3
	return 0;
}
2、递归函数 (1)递归求阶乘和
#include 
long Fun(int n)
{
	return n==1?1:n*Fun(n-1);	
}
int main()
{
	int a=0;
	long sum=0;
	scanf("%d",&a);
	for(int i=1;i<=a;i++)
		sum+=Fun(i);
	printf("%ld",sum); 
	return 0;
}
(2)递归求平方和
#include 
double Fun(int n)
{
	return n==1?1:n*n+Fun(n-1);
}
int main()
{
	printf("%.2lf",Fun(2));
	return 0;
}
(3)递归求x的n次方
#include 
double Fun(int x,int n)
{
	return n==0?1:x*Fun(x,n-1);
}
int main()
{
	printf("%.2lf",Fun(2,2));
	return 0;
}
(4)递归求斐波那契数列前n项
#include 
int Fun(int n)
{
	return n==1||n==2?1:Fun(n-1)+Fun(n-2);
}
int main()
{
	int n=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		printf("%d ",Fun(i));
	return 0;
}
(5)递归求杨辉三角前n行
#include 
int Fun(int i,int j)
{
	return i==j||j==1?1:Fun(i-1,j-1)+Fun(i-1,j);
}
int main()
{
	int n=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
			printf("%d ",Fun(i,j));
		putchar('n');
	}
	return 0;
}
(6)递归求最大公约数
#include 
int Fun(int a,int b)
{
	int t=0;
	if(a
		t=a;a=b;b=t;
	}
	return a%b?Fun(b,a%b):b;
}
int main()
{
	int a=0,b=0;
	scanf("%d %d",&a,&b);
	printf("%d",Fun(a,b));
	return 0;
}
七、结构体 1、结构体求平均成绩
#include 
struct stu{
	char name[20];
	double score;
};
int main()
{
	struct stu a[30];
	int n=0,i=0;
	double avg=0.0;
	scanf("%d",&n);
	for(i=0;i
		gets(a[i].name);
		scanf("%lf",&a[i].score);
		avg+=a[i].score/n;
	}
	printf("%lf",avg);
	return 0;
}
2、结构体按某成员进行排序
#include 
struct stu{
	char name[20];
	int id;
	double score;
};
int main()
{
	struct stu a[30],t=0;
	int n=0,i=0,j=0;
	scanf("%d",&n);
	for(i=0;i
		gets(a[i].name);
		scanf("%d%lf",&a[i].id,&a[i].score);
	}
	for(i=0;ia[j].id)
			{
				t=a[i];a[i]=a[j];a[j]=t;
			}
	for(i=0;i 
3、结构体求最高分并输出该学生的所有信息 
#include 
struct stu{
	char name[20];
	int id;
	double score;
};
int main()
{
	struct stu a[30],t;
	int n=0,i=0,imax=0;
	double max=0.0;
	scanf("%d",&n);
	for(i=0;i
		gets(a[i].name);
		scanf("%d%lf",&a[i].id,&a[i].score);
		if(a[i].score>max)
		{
			max=a[i].score;
			imax=i;
		}
	}
	printf("%st%dt%lfn",a[imax].name,a[imax].id,a[imax].score);
	return 0;
}
八、其他 1、可逆素数
#include 
int convert(int a)
{
	int t=0;
	do{
		t=t*10+a%10;
		a/=10;
	}while(a);
	return t;
}
int issushu(int b)
{
	for(int i=2;i
	int j=0;
	for(int i=m;i<=n;i++)
		if(issushu(i)&&issushu(convert(i)))
			c[j++]=i;
	return j;
}
int main()
{
	int m=0,n=0,a[100],w=0;
	scanf("%d%d",&m,&n);
	w=Fun(m,n,a);
	for(int i=0;i
		printf("%d ",a[i]);
		if((i+1)%5==0)
			putchar('n');
	}
	return 0;
}
2、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列
#include 
int main()
{
	int a[10],b=0,i=0,*p=a;
	for(i=0;i<9;i++)
		scanf("%d",p++);
	scanf("%d",&b);
	p--;
	while(b<*p)
		*(p+1)=*p--;
	*(p+1)=b;
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
	return 0;
}
3、分段函数(if语句)

#include 
int main()
{
	double y=0.0,x=0.0;
	scanf("%lf",&x);
	if(x<1)
		y=x;
	else if(x>=10)
		y=3*x-11;
	else
		y=2*x-1; 
	printf("%.2lf",y);
	return 0;
}
4、求e的近似值
#include 
double jc(int i)
{
	return i==1?1:i*jc(i-1);
}
int main()
{
	double e=1.0;
	int i=0,n=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		e+=1/jc(i);
	printf("%lf",e);
	return 0;
}
5、九九乘法表
#include 
int main()
{
	int i=0,j=0;
	for(i=1;i<=9;i++)
	{
		for(j=1;j<=i;j++)
			printf("%d*%d=%dt",j,i,i*j);
		putchar('n');
	}
	return 0;
}
6、输出倒三角

#include 
int main()
{
	int i=0,j=0,t=0;
	for(i=0;i<4;i++)
	{
		for(t=0;t 
7、猴子吃桃 
#include 
int fun(int n)
{
	return n==1?1:(fun(n-1)+1)*2;
}
int main()
{
	printf("%d",fun(3)); //10
	return 0;
} 
8、温度转换
#include 
int main()
{
	double hs=150;
	int c=0;
	c=5*(hs-32)/9;
	printf("%d",c);
	return 0;
} 
9、计算物体自由下落的距离
#include 
int main()
{
	double h=0.0;
	h=10*3*3/2;
	printf("%lf",h);
	return 0;
} 
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/925382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号