古堡算式:
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
简单暴力破解:
#include<iostream>
using namespace std;
/*
古堡密码
福尔莫斯追踪到古堡
ABCDE * ? = EDCBA
*/
int main()
{
int x,y,k;
for(x=10000;x<100000;x++)
{
int a=x/10000;
int b=x%10000/1000;
int c=x%1000/100;
int d=x%100/10;
int e=x%10;
if(a==b || a==c || a==d || a==e || b==c || b==d || b==e
|| c==d || c==e || d==e) continue;
y = e * 10000 + d * 1000 + c * 100 + b * 10 + a;
for(k=1;k<10;k++)
if(x*k==y)
printf("%d*%d=%d\n",x,k,y);
}
return 0;
}
类似的题还有://赛软件*比赛=软件比拼
//赛软件*比赛=软件比拼
int main()
{
int x,y,z,k,m;
for(x=100;x<1000;x++)
{
int a=x/100; //赛
int b=x%100/10; //软
int c=x%10; //件
if(b==0) continue;
for(k=1;k<10;k++) //比
{
y=10*k+a;
for(m=0;m<10;m++)//拼
{
z=1000*b+100*c+10*k+m;
if(x*y==z)
printf("%d * %d= %d\n",x,y,z);
}
}
}
return 0;
}
这类题都可以爆破,要注意continue的使用,可以节约不少循环,以前很少用continue,都是break,这个continue还是挺方便的