题目描述:

    福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:

    ABCDE * ? = EDCBA

    他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”

    华生:“我猜也是!”

    于是,两人沉默了好久,还是没有算出合适的结果来。

    请你利用计算机的优势,找到破解的答案。

    把 ABCDE 所代表的数字写出来。

    答案写在“解答.txt”中,不要写在这里! 

“ABCDE应该代表不同的数字,问号也代表某个数字”,这就是题目给我们的一个非常重要的信息,即ABCDE是1至9之间不同的数字(不包括0,因为如果0在首位就不满足五位数),而问号跟简单,它代表的一定是1到9的某个数字。那么做题的方法只需要将1至9取出5个数组合,然后再分别乘以1到9的某个数字看看结果是不是刚好等于第一个数的颠倒数(如12345的颠倒数是54321)即可。

最后找出的正确答案是:21978(21978*4=87912)

#include<stdio.h>
#include<stdlib.h>
int Change(int a[])
{
int i,n=0;
for(i=0;i<5;i++)
n=n*10+a[i];
return n;
}
int main()
{
int i,j,k,l,t,n,m,flag,a[6],b[6];
flag=0;
for(i=1;i<=9;i++)
{
a[0]=i;b[4]=i;if(flag==1)break;
for(j=1;j<=9;j++)
{
a[1]=j;b[3]=j;if(flag==1)break;
for(k=1;k<=9;k++)
{
a[2]=k;b[2]=k;if(flag==1)break;
for(l=1;l<=9;l++)
{
a[3]=l;b[1]=l;if(flag==1)break;
for(t=1;t<=9;t++)
{
a[4]=t;b[0]=t;if(flag==1)break;
for(m=2;m<=9;m++)
{
if(Change(a)*m==Change(b))
{
printf("%d*%d=%d\n",Change(a),m,Change(b));
flag=1;
}
}
}
}
}
}
}
system("pause");
return 0;
}


用的方法比较原始,如果求的位数多的话可能会超时,期待更优化的方法