<span style="font-family: KaiTi_GB2312; background-color: rgb(255, 255, 255);">福尔摩斯到某古堡探险</span>
看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
解题思路:
分析此题,可以得出以下信息:
1.ABCDE 和?分别代表0~9不同的数字
2.因为首字母代表高位数,暗含A和E不为0
3.同理,?不可能是0,一定是1~9之间的数
到此,可以知道BCD可能是0~9之间的数,AE?一定是1~9的数。
#include <stdio.h>
int main(void){
int temp=12345;
int a[5];
for(;temp<100000;temp++){
a[0]=temp%10;//取个位
a[1]=temp/10%10;//取十位
a[2]=temp/100%10;//取百位
a[3]=temp/1000%10;//取千位
a[4]=temp/10000;//取万位
/**
*
*if(a[0]==a[4]&&a[1]==a[3]&&a[0]!=a[1]){ //正难则反,反证法
*
*}
**/
//保证ABCDE代表的数字各不相同
if(a[0]==a[1]||a[0]==a[2]||a[0]==a[3]||a[0]==a[4]||
a[1]==a[2]||a[1]==a[3]||a[1]==a[4]||
a[2]==a[3]||a[2]==a[4]||
a[3]==a[4]){
continue;
}
int t = (a[4]+a[3]*10+a[2]*100+a[1]*1000+a[0]*10000);
int i=1;
for(;i<10;i++){
if(temp*i==t){ //此时,可以不用再判断i与ABCDE是否相同了,因为满足该条件的数很少,比赛时间有限,所以能简则简。
printf("%d\n",t);
}
}
}
return 0;
}