福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
思路:对最小的不重复数12345到最大的不重复数98765进行遍历。 一个cheak函数 检查每位是否相同进行筛选,
如果不相同则经行该数对1~9的乘积 如果等于倒数则输出。
方法1:
#include<iostream>
using namespace std;
int dao(int i)
{
int a,b,c,d,e,sum;
a = i%10;
b = i/10%10;
c = i/100%10;
d = i/1000%10;
e = i/10000;
sum = a*10000 + b*1000 + c*100 + d*10 + e;
return sum;
}
int cheak(int i)
{
int a,b,c,d,e;
a = i%10;
b = i/10%10;
c = i/100%10;
d = i/1000%10;
e = i/10000;
if((a != b) && (b != c) && (c != d) && (d != e) && (a != c) && (a != d) && (a != e) && (b != d) && (b != e) && (c != e)){
return 1;
}
else
return 0;
}
int main()
{
int a,b,c,d,e;
int i;
for(int i = 12345; i <= 98765; i++){
if(cheak(i) == 0){
continue;
}
for(int j = 1; j <= 9; j++){
if(j*i == dao(i)){
cout << i<<" "<<j<< endl;
}
}
}
}
方案2:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
for(int a=1;a<=9;a++)
{
for(int b=0;b<=9;b++)
{
for(int c=0;c<=9;c++)
{
for(int d=0;d<=9;d++)
{
for(int e=0;e<=9;e++)
{
if(a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)
{
if((e*10000+d*1000+c*100+b*10+a)%(a*10000+b*1000+c*100+d*10+e)==0)
{
printf("%d%d%d%d%d\n",a,b,c,d,e);
}
}
}
}
}
}
}
return 0;
}
答案:21978