int f(int x) { int a,b,c,d; a=x/1000; b=x/100; c=x/10; d=x; if(a+b==b+c) return 1; return 0; }
void main() { int i,num=0; for(i=1000;i<=9999;i++) if(i%8==0) if(f(i)) num++; printf(\}
12、数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。下列程序的功能是求出该数列前10项的和。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!) 答案:311 #include
long sum=0,a[30]={1,2,1}; int k,j;
for( k=3;k<10;k++ )
a[k] = a[k-1]+a[k-2]+a[k-3]; for( j=1;j<=10;j++ )
sum += a[j]; //改为:sum+=a[j-1]; printf(\ }
13、 /*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ 答案:61 #include
int k;
for(k=2;k if(_x%k==0_) break; if(k==x) return 1; else return 0; } void main( ) { int a,b,n=0; int prime(int x); for(a=2;a<=1998;a++) { if(prime(a)==1) { b=a+2; if(_prime(b)==1_) n++; } } printf(\} 14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。答案:4 #include 15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?答案:9 #include if(i*3+j*2+k*1==50 && i+j+k==30) { printf(\ num++; } printf(\} 16、爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?答案:119 #include for(x=1;;x++) if ((x%2==1)&&(x%3==2)&&(x%5==4)&&(x%6==5)&&(x%7==0)) {printf(\} 17、求1000以内最大的10个素数的和。 答案:9664 #include long k; for(k=2;k<=n-1;k++) if(__n%k==0__) return 0; return 1; } void main( ) { long t,total=0,num=0; int prime(long n); for(t=1000;t>=2;t--) { if(_prime(t)__) { total=total+t; num++; } if(num==10)break; } printf(\} 18、 /*求1!+2!+3!+...+7!,7!表示7的阶乘。*/ 答案:5913 #include long k,fac=1; for(k=1;_ k<=x__;k++) fac *=k ; _return fac__; } void main( ) { long n,sum=0; long jc(long x); for(n=1;n<=7;n++) _sum=sum+jc(n)_; printf(\} 19、求10000以内所有完数之和,\完数\是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。(注:所有变量用int数据类型定义!) 答案:8658 #include void main() { int ws(int x); int i,sum=0; for(i=1;i<=10000;i++) if(ws(i)) sum=sum+i; printf(\} 20、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。下列程序先给出数列的第一项(1)、第二项(2)、 第三项(1),再逐步计算其它项并保存在数组a中,最后求出该数列的第25项。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/答案:1323525 #include long a[N]; int k; clrscr(); a[0] = 1; a[1] = 2; a[2]=1; for( k=3;k<=20;k++ ) //改为:for( k=3;k<=24;k++ ) a[k] = a[k-1]+a[k-2]+a[k-3]; printf(\ } 21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。*/ 答案:87970 #include long x=n,t=0,k; while(x>0) { k=x; t = t*10 + k; x=x/10; } if( _t==n__) return 1; else return 0; } void main( ) { long k,s=0; int hws(long n); for(k=200; k<=3000;k++) if(_hws(k)__) s=s+k; printf(\} 22、/*下面的程序是求表达式的值: s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+...+(1*2*3*...*n)/(3*5*7*...(2*n+1))请将程序补充完整,并给出当n=25时,程序的运行结果(按四舍五入保留10位小数)。*/答案:1.5707963267