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+%dn", 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
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/cs-whut/p/16904216.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!