1.求100以内的素数
int main( )
{ int i,j,count=0;for(i=1;i<100;i++){for(j=2;j<i;j++){if(i%j==0)break;}if(i==j){count++; printf("%d ",i);if(count%5==0)printf("\n");}}
}
2.求1000以内的完数 *
完数:等于其因子(不含本身)之和,如6=1+2+3
int main( )
{ int i,j,sum;for(i=1;i<1000;i++){sum=0;for(j=1;j<i;j++){if(i%j==0)sum+=j;}if(sum==i)printf("%d ",sum);}
}
3.打印所有水仙花数
int main( )
{ int a,b,c,i;for(i=100;i<=999;i++){a=i%10;b=i/10%10;c=i/100;if(a*a*a+b*b*b+c*c*c==i)printf("%d ",i);}
}
4.一个球从100米高自由落下,每次落地后反弹回原高度的一半,再落下。求第10次落地时,共经过多少米,第10次反弹多高?
int main( )
{ float sn=100.0,hn=sn/2;int n;for(n=2;n<=10;n++){sn=sn+hn*2;hn/=2;}printf("共经过%f米,第10次反弹%f米\n",sn,hn);
}
5.百马百担问题
int main( )
{ int dm,zm,xm;for(dm=0;dm<34;dm++){for(zm=0;zm<51;zm++){xm=100-dm-zm;if(xm%2==0&&dm*3+zm*2+xm/2==100)//小马为偶数个才能实现"两匹小马驮一旦" printf("大马有%d,中马有%d,小马有%d\n",dm,zm,xm);}}
}
6.打印形状为直角三角形的九九乘法表
int main( )
{ int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-4d",i,j,i*j);printf("\n");}
}
7.求e的值
int main( )
{ float e=1,m=1;long i=1,n=1;while(m>=0.001){m=1./n;e+=m;n*=++i;}printf("%f",e);
}
8.计算Sn=a+aa+aaa+…+aa…a(n个a),a和n从键盘上输入
int main( )
{ int a,i,n,m=0;long sum=0;printf("请输入a和n:\n");scanf("%d%d",&a,&n);for(i=0;i<n;i++){ m=a+m*10;sum+=m;}printf("%ld",sum);
}
s=2+22+222+2222
9.爱因斯坦台阶问题
题目略
int main( )
{ int number;for(number=14;;number++)if(number%2==1&&number%3==2&&number%5==4&&number%6==5&&number%7==0){printf("%d",number);//119break;}
}
10.鸡兔同笼问题
int main( )
{ int x,y;for(x=1;x<=35;x++){for(y=1;y<=35;y++)if((x+y)==35&&2*x+4*y==94){printf("鸡有%d只,兔有%d只\n",x,y);break;} }
}
11.百鸡问题
遇到这种题,简单的方法直接使用穷举就完了。
int main( )
{ int gj,mj,xj;for(gj=0;gj<=20;gj++){for(mj=0;mj<=33;mj++){xj=100-gj-mj;if(gj*5+mj*3+xj/3==100&&xj%3==0)printf("公鸡%d母鸡%d小鸡%d\n",gj,mj,xj);}}
}
12.猴子吃桃问题
int main( )
{ int x=1,y=9;while(y>0){x=2*(x+1);y--;}printf("%d\n",x);//1534
}
13.输出斐波那契数列前20项
法一:(btw,这是一行4个)
int main( )
{ int f1=1,f2=1,i,count;for(i=1;i<=10;i++){printf("%5d%5d",f1,f2);count++; f1=f1+f2;f2=f1+f2;if(count%2==0)printf("\n");}
}
法二:(这是一行五个)
int fib(int n){if(n==1||n==2)return 1;else return fib(n-1)+fib(n-2);
}
int main( )
{ int n;for(n=1;n<=20;n++){ printf("%5d",fib(n));if(n%5==0)printf("\n");}
}
14.输入一个数,颠倒输出,并输出其有几位数
int main( )
{ int num;scanf("%d",&num);int a,b,num1,count=0;num1=num;while(num1>0){a=num1%10;b=b*10+a;num1/=10;count++;}printf("有%d位数,逆序过后是%d\n",count,b);
}
15.求两数的最大公约数和最小公倍数
辗转相除法
int main( )
{ int m,n,r;scanf("%d%d",&m,&n);int t,x;if(m<n){t=m;m=n;n=t;}r=m%n;x=m*n;while(r!=0){m=n;n=r;r=m%n;}printf("最小公倍数是%d,最大公约数是%d\n",x/n,n);
}
16.分解质因数 *
int main( )
{ int num,i;scanf("%d",&num);printf("%d=1*",num);for(i=2;i<num;i++){while(i!=num){if(num%i==0){printf("%d*",i);num/=i;}elsebreak;}}printf("%d",num);
}
17.判断两数是否互质(最大公约数为1的两个数为互质数)
int gcd(int m,int n){int t;if(m>n){t=m;m=n;n=t;}int r=m%n;while(r!=0){m=n;n=r;r=m%n;}return n;
}
int main( )
{ int m,n;scanf("%d%d",&m,&n);if(gcd(m,n)>1)printf("两数不是互质的\n");elseprintf("两数是互质的\n");
}
18.求1+22+333+4444+55555+…+n…n
int main( )
{ int n;scanf("%d",&n);int i,j,k=0,sum=1;for(i=2;i<=n;i++){k=i;for(j=2;j<=i;j++){ k=k*10+i; }sum+=k; }printf("%d",sum);
}
19.产生10个0-100的随机数,输出最大值
#include<time.h>
int main( )
{ int a[10],max,i;srand(time(0));//设置随机数种子for(i=0;i<10;i++){a[i]=rand()%100;printf("%d ",a[i]);}max=a[0];for(i=1;i<10;i++){if(max<a[i])max=a[i];}printf("\n最大值是%d\n",max);
}
20.用选择法排序(从小到大)
int main( )
{ int a[10]={3,9,1,56,12,7,5,78,89,16};int i,min,j,t;for(i=0;i<9;i++){min=i;for(j=i+1;j<10;j++){if(a[min]>a[j])min=j;}if(min!=i){t=a[i];a[i]=a[min];a[min]=t;}}for(i=0;i<10;i++)printf("%d ",a[i]);
}
21.用冒泡法排序
int main( )
{ int a[10]={3,9,1,56,12,7,5,78,89,16};int i,j,t;for(i=0;i<10-1;i++){for(j=0;j<10-1-i;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]);
}
22.插入数组元素
int main( )
{ int a[10]={0,11,22,44,55,66},len=6;int i,loc,data;printf("请输入插入位置和数据:");scanf("%d%d",&loc,&data);if(len<10){for(i=len;i>loc;i--)a[i]=a[i-1];//元素后移a[loc]=data;len++; }elseprintf("存储单元不足\n");for(i=0;i<len;i++){printf("%d ",a[i]);}
}
23.插入一个数至有序数组
int main( )
{ int a[11]={1,3,9,11,13,15,18,19,21,23};int i,j,num;printf("请输入你要插入的数字:");scanf("%d",&num);for(i=0;i<10;i++)if(num<a[i])break;for(j=10;j>i;j--)a[j]=a[j-1];a[i]=num;for(i=0;i<11;i++)printf("%d ",a[i]);
}
24.删除指定位置的数组元素
int main( )
{ int a[10]={0,11,22,100,33,44,55,66},len=8;int i,loc=3;if(loc<len){for(i=loc;i<len;i++)a[i]=a[i+1];len--;}elseprintf("查无此数\n");for(i=0;i<len;i++)printf("%d ",a[i]);
}
25.删除指定数组元素
法一:
int main( )
{ int a[10]={0,11,22,100,33,44,55,66},len=8;int i,num,sign;scanf("%d",&num);for(i=0;i<10;i++){if(num==a[i]){sign=i; break;} }for(i=sign;i<len;i++)a[i]=a[i+1];len--;for(i=0;i<len;i++)printf("%d ",a[i]);
}
法二:
int main(){int a[10],x,*p,*q;printf("请输入十个整数:");for(p=a;p<a+10;p++)scanf("%d",p);printf("请输入要删除的数字:");scanf("%d",&x);for(p=q=a;p<a+10;p++)if(x!=*p)*q++=*p;if(q==p)printf("查无此数\n");else{for(p=a;p<q;)printf("%d ",*p++);}
}
26.折半查找法
int main( )
{ int a[10]={0,11,22,33,44,55,66,77,88,99},key;int l=0,h=9;//在a[l]~a[h]范围内查找int m;scanf("%d",&key);//输入要查找的值while(l<=h){m=(l+h)/2;if(key==a[m])break;else if(key<a[m])h=m-1;else if(key>a[m])l=m+1;} if(l<=h)printf("找到,在第%d个\n",m+1);else printf("not found\n");
}
27.字符串排序
#include<string.h>
int main( )
{ char a[5][11],buf[11];int i,j,min;for(i=0;i<5;i++)gets(a[i]);for(i=0;i<5-1;i++){min=i;for(j=i+1;j<5;j++){if(strcmp(a[j],a[min])<0)min=j;}if(min!=i){strcpy(buf,a[i]);strcpy(a[i],a[min]);strcpy(a[min],buf);}}for(i=0;i<5;i++)puts(a[i]);
}
28.将十进制数转换成其他进制的字符串 *
int main( )
{ char c[]="0123456789ABCDEF";//余数对应字符char result[33];//存放结果int dec,base,i,r;//转换的十进制整数及要转换的进制for(i=0;i<32;i++)result[i]=' ';result[32]='\0';printf("请输入要转换的数据 进制:\n");scanf("%d %d",&dec,&base);i=31;//逆序存放的下标while(dec>0){r=dec%base;result[i--]=c[r];dec/=base;} puts(result);
}
29.计算一个3X4矩阵a和一个4X3矩阵b相乘的值,并输出结果r,r为一个3X3矩阵。(r [ i ][ j ]=a的第i行和b的第j列元素相乘的累加和)
int main( )
{ long x1[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},x2[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};long result[3][3];long sum=0;int i,j,k;for(i=0;i<3;i++)for(j=0;j<3;j++){sum=0;for(k=0;k<4;k++)sum+=x1[i][k]*x2[k][j];result[i][j]=sum;}for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%ld ",result[i][j]);printf("\n");}
}
30.逆序输出字符串
#include<string.h>
int main( )
{ char s1[100]="12345ABC",s2[100];int i,j,len=strlen(s1);for(i=len-1,j=0;i>=0;i--)s2[j++]=s1[i];puts(s2);
}
31.判断是否回文字符串
int main( )
{ char s[100];gets(s);int i,j,len=strlen(s);for(i=0,j=len-1;i<j;i++,j--){if(s[i]!=s[j])break;}if(i>=j)printf("yes");else printf("no");
}
32.连接字符串
int main( )
{ char s1[100],s2[100];gets(s1);gets(s2);int i=0,j=0;while(s1[i]!='\0')i++;while(s2[j]!='\0'){s1[i+j]=s2[j];j++;}s1[i+j]='\0';puts(s1);
}
33.每传递三个字符后存放一个空格,例如输入abcdefg,输出abc def g
int main( )
{ char s[100],t[120];gets(s);int i=0,k=0;while(s[i]!='\0'){t[k++]=s[i++];if(i%3==0){t[k]=' ';k++;continue;} }puts(t);
}
int main( )
{ int j,k=0;char s[60],t[100],*p;p=s;gets(p);while(*p){for(j=1;j<=3&&*p;j++,p++,k++)t[k]=*p;if(j==4){t[k]=' ';k++;}}t[k]='\0';puts(t);
}
34.用递归的方式求n!
int fun(int n){if(n==1)return 1;else return n*fun(n-1);
}
int main( )
{ int n;scanf("%d",&n);printf("%d",fun(n));
}
35.将一个子字符串插入到主字符串的指定位置
int main( )
{ char s1[100]={"youarebeautiful"},s2[100],s3[50];//s3暂存字符串 printf("请输入子字符串:");gets(s2);int i,j=0,n;printf("请输入要插入的位置:");scanf("%d",&n);i=n;while(s1[i]!='\0'){s3[j]=s1[i];//原数组n后面的部分保存到s3里 j++;i++;}s3[j]='\0';j=0;while(s2[j]!='\0'){ s1[n]=s2[j]; //s1被赋值要插入的字符串,n为插入位置 j++;n++;}s1[n]='\0';strcat(s1,s3);puts(s1);
}
36.统计子串在母串中出现的次数
int main( )
{ char s1[100],s2[100];int i,j,t,count=0;scanf("%s%s",s1,s2);//输入母串和子串 i=0;while(s1[i]!='\0'){t=i;j=0;while(s2[j]!='\0'&&s1[t]==s2[j]){t++;j++;}if(s2[j]=='\0'){count++;i=t;}else i++;} printf("出现了%d次",count);
}
37.输出以下矩阵
int main( )
{ int i,j,k=0,a[4][4]={0};for(j=0;j<4;j++){for(i=3;i>=j;i--){a[i][j]=++k;}}for(i=0;i<4;i++){for(j=0;j<=i;j++){printf("%d ",a[i][j]);}printf("\n");}
}
38.插入法排序 *
int main( )
{ int a[10]={99,12,34,65,23,90,1,56,45,27},i,j,k;for(i=1;i<10;i++){k=a[i];j=i-1;while(j>=0&&a[j]>k){a[j+1]=a[j];j--;}a[j+1]=k;}for(i=0;i<10;i++)printf("%d ",a[i]);
}
39.打印杨辉三角
非递归:
int main( )
{ int i,j,a[10][10];for(i=0;i<10;i++){a[i][i]=a[i][0]=1;}for(i=2;i<10;i++){for(j=1;j<i;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%5d",a[i][j]);printf("\n");}
}
递归法:
int fun(int m,int n){if(n==0||m==n)return 1;elsereturn fun(m-1,n)+fun(m-1,n-1);
}
int main( )
{ int i,j,n=10;for(i=0;i<n;i++){for(j=0;j<=i;j++)printf("%d ",fun(i,j));printf("\n");}
}
40.求0~7所能组成的奇数个数
#include<stdio.h>
int main(){long sum=4,s=4;int i;for(i=2;i<=8;i++){printf("%ld",sum);if(i<=2)s*=7;elses*=8;sum+=s;}printf("\nsum=%ld",sum);
}
41.猴子选大王
#include<stdio.h>
int main(){int M,N;int a[100]={0},i,k=0,d=0,m=0;printf("请输入猴子数N和报数M:\n");scanf("%d%d",&N,&M);for(i=0;i<N;i++)a[i]=1;while(d!=N){for(i=0;i<N;i++){k+=a[i];if(k!=M)continue;m=i;a[i]=0;k=0;d++;}}printf("留下来的是原来的%d号",m+1);
}
42.加100是完全平方数,加168又是完全平方数
#include<stdio.h>
#include<math.h>
int main(){int i,x,y;for(i=1;i<100000;i++){x=sqrt(i+100);y=sqrt(i+268);if(x*x==i+100&&y*y==i+268)printf("%d ",i);}
}
43.求2/1+3/2+5/3+8/5+13/8…20项之和
#include<stdio.h>
int main(){int i,t;float sum=0,a=2,b=1;for(i=1;i<=20;i++){sum=sum+a/b;t=a;a=a+b;b=t;}printf("%f",sum);
}
44.凯撒移位密码
#include<stdio.h>
int main(){char str[100]={0};int key,i=0;scanf("%d",&key);getchar();gets(str);while(str[i]){if(str[i]>='A'&&str[i]<='Z')str[i]=(str[i]-'A'+key)%26+'A';else if(str[i]>='a'&&str[i]<='z')str[i]=(str[i]-'a'+key)%26+'a';i++;}printf("%s",str);
}