古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
思路:循环遍历每个字母可能的情况。
答案:21978
我用的暴力,既然是结果天空,也不需要过多的优化(比如a小于5)就是简单的暴力,在判断字母不相同的时候,既可以用联结判定,也可以像我一样建立一个标记数组,开在全局省去初始化,用的时候标记为1,用完之后再放回去,标记成0。
另外,为了寻找多组值,我先输出变量sum(注释掉了)发现只有一种符合要求的组合;
上代码
#include<iostream>
using namespace std;
int book[10];
int main(){
int a,b,c,d,e,k,sum = 0;;
for(a = 1;a <= 9;a++){
book[a] = 1;
for(b = 1;b <= 9;b++){
if(book[b] != 0)
continue;
book[b] = 1;
for(c = 1;c <= 9;c++){
if(book[c] != 0)
continue;
book[c] = 1;
for(d = 1;d <= 9;d++){
if(book[d] != 0)
continue;
book[d] = 1;
for(e = 1;e <= 9;e++){
if(book[e] != 0)
continue;
book[e] = 1;
for(k = 1;k <= 9;k++){
if(k*(10000*a+1000*b+100*c+10*d+e) == 10000*e+1000*d+100*c+10*b+a)
//sum++;
cout << a << b << c << d << e << endl;
}
book[e] = 0;
}
book[d] = 0;
}
book[c] = 0;
}
book[b] = 0;
}
book[a] = 0;
}
//cout << sum << endl;
return 0;
}