(7)巩固一下C语言基础知识,谁动手,谁收获。

问题23:
 编程解决如下问题(50  分)  。  有一个数学等式:ABCD*E=  DCBA,式中的一个字母代表一位数字,试找出所有符合上述  要求的乘积式并打印输出。  


问题24:
编程解决如下问题(50  分)  。  请在整数  n=92081346718538  中删除  10个数字,  使得余下的数字按原次序组成的新数最 大。要求如下:  (1)整数  n和删除数字的个数“10”在源程序中完成赋值,程序直接输出运行结果; (2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最大数。  (提示:整数  n  可以以字符数组的方式定义、赋值和处理)


问题25:
编程解决如下问题(50 分) 。 在小于 10 的素数中有 3、5、7 组成的等差数列,在小于 30 的素数中有 11、17、23、 29 组成的等差数列。试找出区间[100,1000]内的素数构成的最大等差数列(即等差数列包 含的素数个数最多)并打印输出。

问题23实现代码:

/* author:宋金时 */
/* date:2011/11/05 */

#include "Stdio.h"
#include "Conio.h"

int main(void)
{
 int i,j,num,num2,e,arr[4];
  for(i=1000;i<10000;i++)
  {
    num = i;
    for(j=0;j<4;j++)
    {
      arr[j] = num%10;
      num/=10;
    }
    num2 = (arr[3]+arr[2]*10+arr[1]*100+arr[0]*1000);
    for(j=1;j<10;j++)
    {
       e = j;
       if(i*e==num2)
       {
       printf("%d*%d=%d\t",i,e,num2);
       }
    }
  }
  getch();
  return 0;
}


问题24实现代码:
/* author:宋金时 */
/* date:2011/11/05 */

#include "Stdio.h"
#include "Conio.h"

int main(void)
{
  char str[] = "92081346718538",*s_p,*end_str,*temp;
  int n=10,len;
  s_p = str;
  len = strlen(str);
  end_str = str+len-1;
  while(*s_p!='\0'&&n>0)
  {
     if(*s_p<'8')
        {
            printf("%c,",*s_p);
           temp = s_p;
            while(temp<end_str)
            {
                *temp=*(temp+1);
                temp++;
            }
            *end_str = '\0';
            end_str--;
            n--;
        }
        else
            s_p++;
  }
  printf("%d\n",atoi(str));
  getch();
  return 0;
}

问题25实现代码:
/* author:宋金时 */
/* date:2011/11/05 */

#include "Stdio.h"
#include "Conio.h"

#define N (1000-100)

int main(void)
{
 /* 此处添加你自己的代码 */
 int num[N],i,j,k,cha,pos=0,count=0,count_temp=0,*max,*max_temp;
 for(i=100;i<1000;i++)
 {
    for(j=2;j<i;j++)
    {
        if(i%j==0)
            break;
    }
    if(j==i)
    {
        num[pos++]=i;
    }
 }
 for(i=0;i<pos;i++)
 {
    printf("%d\t",num[i]);
 }
 printf("\n===========================================\n");


 max=(int*)malloc(pos*sizeof(int));
 max_temp=(int*)malloc(pos*sizeof(int));
 memset(max,0,pos*sizeof(int));
 memset(max_temp,0,pos*sizeof(int));
 /*******************************************************/
 /* 找到一组最大的等差数列,并得到最大数列的个数 */
 for(i=0;i<pos;i++)
 {
    for(j=i+1;j<pos;j++)
    {
        count_temp=0;
        max_temp[count_temp++]=num[i];
        max_temp[count_temp++]=num[j];
        cha=max_temp[0]-max_temp[1];
        for(k=j+1;k<pos;k++)
        {
           if(cha==(max_temp[count_temp-1]-num[k]))
           {
            max_temp[count_temp++]=num[k];
           }
        }
      if(count<=count_temp)
      {
        count=count_temp;
        for(k=0;k<count;k++)
        {
            max[k]=max_temp[k];
        }
      }
    }
 }
 for(i=0;i<count;i++)
 {
    printf("%d\t",max[i]);
 }
 printf("\n===========================================\n");
 /**********************************************************/
 /* 打印出所有最大数列 */
 for(i=0;i<pos;i++)
 {
    for(j=i+1;j<pos;j++)
    {
        count_temp=0;
        max_temp[count_temp++]=num[i];
        max_temp[count_temp++]=num[j];
        cha=max_temp[0]-max_temp[1];
        for(k=j+1;k<pos;k++)
        {
           if(cha==(max_temp[count_temp-1]-num[k]))
           {
            max_temp[count_temp++]=num[k];
           }
        }
      if(count_temp==count)
      {
        for(k=0;k<count;k++)
        {
            printf("%d\t",max_temp[k]);
        }
        printf("\n");
      }
    }
 }
 /*******************************************************/
 free(max);
 free(max_temp);
 max=NULL;
 max_temp=NULL;
  getch();
  return 0;
}



你可能感兴趣的:(编程,c,Date,null,语言)