实验4-5 数字组合
编写程序abcd.c,设有十进制数字a,b,c,d,e,求满足下列式子:abc*e=dcba(a≠0,e≠0且e≠1)的最大的abcd。
格式要求 输入:无输入 输出: 求出满足条件的abcd, printf(“abcd=%d\n”, abcd)
保存,编译、运行、测试成功后将源程序文件(.c或.cpp)压缩,提交。
提示:abc是指由数字a,b,c组合得到的3位整数,即a100+b10+c dcba,abcd也是组合得到的。
和求水仙花数有点像,比较好的入门枚举题
方法一:直接做
具体细节看注释
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,t,tot=0,temp;
int a[1000+5];
memset(a,0,sizeof(a));
for(i=100;i<=999;i++)//从100枚举到999,三位数abc
{
temp=(i%10)*100+(i/10%10)*10+i/100;//把abc变成cba
if(temp<100)//显然如果换过来不是3位数,肯定是无解的,因为cba是三位数
{
continue;//跳过这次循环,到下一次
}
for(j=1;j<=9;j++)
{
t=i*j;
//printf("%d\n",t);
if(t>1000&&t%1000==temp)
{
a[tot++]=i*10+t/1000;
//printf("%d %d\n",a[tot-1],j);//这句代码测试用,你可以看到具体的abcd和e
}
}
}
/*for(i=0;i<tot;i++)
{
printf("%d\n",a[i]);
}*/
//上面的代码也是测试使用 ,检查是否正常运行,输出所有满足条件的数
printf("%d",a[tot-1]);//按要求取最大的数
return 0;
}
给出其他可行解
4992 6
5992 5
8023 4
9018 9
9676 7
abcd e
方法二:打表
直接输出答案就行了,时间复杂度o1,答案实际上是9676
#include<stdio.h>
#include<string.h>
int main()
{
int abcd=9676;
printf("abcd=%d\n",abcd);
return 0;
}