36、编写函数void fun (int *a, int *n),其功能是:求出100~999之间所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293),并将其放在a所指的数组中,通过n返回这些数的个数。
#include <stdio.h> void fun (int *a, int *n) { } int main() { int aa[1000], n, k ; fun (aa, &n ) ; for ( k = 0 ; k < n ; k++ ) { printf("%5d", aa[k]) ; if ((k + 1) % 10 == 0) printf("\n") ; } return 0; }
void fun (int *a, int *n) { int i,j,bw,sw,gw,cnt=0; for (i=101;i<1000;i+=2) { bw=i/100; sw=i%100/10; gw=i%10; for (j=3;j<i;j+=2) if(i%j==0) break; if ((i==j) &&(gw+sw)%10==bw) a[cnt++]=i; } *n=cnt; }
参考程序
37、编写函数void fun (int *a, int *n),其功能是:找出所有100以内(含100)满足I,I+4,I+10(I+10也在100以内)都是素数的整数I(如3,3、3+4=7、3+10=13均是素数),并将其放在a所指的数组中,通过n返回这些数的个数。
#include <stdio.h> void fun (int *a, int *n) { } int main() { int aa[1000], n, k ; fun (aa, &n ) ; for ( k = 0 ; k < n ; k++ ) { printf("%5d", aa[k]) ; if ((k + 1) % 10 == 0) printf("\n") ; } return 0; }
void fun (int *a, int *n) { int i,j,cnt=0; int isPrime[101]={0}; // isPrime[i]=0 表示i不是素数 isPrime[2]=1; for (i=3;i<100;i+=2) { for (j=3;j<i;j+=2) if (i%j==0) break; if (i==j) isPrime[i]=1; // i是素数 } for(i=2;i<=90;i++) if (isPrime[i] && isPrime[i+4] && isPrime[i+10]) a[cnt++]=i; *n=cnt; }
参考程序
38、下列程序的功能是:寻找并输出11至999之间的数m,它满足m,m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请编写函数intfun(int n),该函数的功能是:如果整数n是回文数,则函数返回1,反之则返回0。
#include <stdio.h> int fun(int n) { } int main() { int m; for(m=11;m<1000;m++) { if (fun(m) && fun(m*m) && fun(m*m*m)) { printf("m=%4d,m*m=%6d,m*m*m=%9d \n",m,m*m,m*m*m); } } return 0; }
int fun(int n) { int s=0,k; k=n; while(k) { s=s*10+k%10; k/=10; } if(s==n) return 1; else return 0; }
参考程序
39、编写函数void fun (int *a, int *n),其功能是:找出所有的自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE,其中的S,I,X,N,E各代表一个十进制数字,所代表的数字可以相同。并将所有找出的自然数SIX放在a所指的数组中,通过n返回这些数的个数。
#include <stdio.h> void fun (int *a, int *n) { } int main() { int aa[1000], n, k ; fun (aa, &n ) ; for ( k = 0 ; k < n ; k++ ) { printf("%d+%d+%d=%d+%d\n", aa[k],aa[k],aa[k],3*aa[k]/2,3*aa[k]/2) ; } return 0; }
void fun (int *a, int *n) { int s,i,x,m,e,six,nine,cnt=0; for (s=1;s<10;s++) for(i=0;i<10;i++) for(x=0;x<10;x++) for(m=1;m<10;m++) for(e=0;e<10;e++) { six=s*100+i*10+x; nine=m*1000+i*100+m*10+e; if (3*six==2*nine) a[cnt++]=six; } *n=cnt; }
参考程序1
// SIX必须是偶数,且SIX最小值为668,因为666*3=1998<2000 // 对SIX进行穷举,NINE=3*SIX/2,若SIX的十位数与NINE的百位数相同, // 且NINE的千位数与十位数相同,则满足条件 void fun (int *a, int *n) { int i,cnt=0; for (i=668;i<=999;i=i+2) if ((i/10%10==(3*i/2)/100%10) && ((3*i/2)/1000==(3*i/2)%100/10) ) a[cnt++]=i; *n=cnt; }
参考程序2
40、编写函数void fun (int *a, int *n),其功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组a中;它既是完全平方数,又是两位数字相同,例如144、676等。并通过n返回这些数的个数。
#include <stdio.h> void fun (int *a, int *n) { } int main() { int aa[1000], n, k ; fun (aa, &n ) ; for ( k = 0 ; k < n ; k++ ) { printf("%5d", aa[k]) ; if ((k + 1) % 10 == 0) printf("\n") ; } return 0; }
void fun (int *a, int *n) { int i,j,k=0; int bw,sw,gw; for(i=100;i<=999;i++) { j=10; while(j*j<=i) { if (i==j*j) { bw=i/100; sw=i%100/10; gw=i%10; if (bw==sw||bw==gw||sw==gw) a[k++]=i; } j++; } } *n=k; }
参考程序1
void fun (int *a, int *n) { int i,j,k=0; int bw,sw,gw; for(j=10;j<=31;j++) { i=j*j; bw=i/100; sw=i%100/10; gw=i%10; if (bw==sw||bw==gw||sw==gw) a[k++]=i; } *n=k; }
参考程序2