问题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;
}
/* 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;
}
/* 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;
}