題目描述:
福爾摩斯到某古堡探險,看到門上寫着一個奇怪的算式:
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;
}
用的方法比較原始,如果求的位數多的話可能會逾時,期待更優化的方法