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;
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);//119
break;
}
}
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;
}
else
break;
}
}
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");
else
printf("两数是互质的\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++;
}
else
printf("存储单元不足\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--;
}
else
printf("查无此数\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);
}