第二题
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
思路:深搜 或者 暴力求解 问号我们看成是第六个数字
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int num[11]={0,1,2,3,4,5,6,7,8,9,0};//十个数字用来赋值
int vis[11];//看是否被访问
int ans[7];//存储结果
void dfs(int n)
{
if(n==7)//n==7说明前面所有都已经赋值完毕 作为结束条件
{
int t=ans[1]*10000+ans[2]*1000+ans[3]*100+ans[4]*10+ans[5];
int p=ans[5]*10000+ans[4]*1000+ans[3]*100+ans[2]*10+ans[1];
if(t*ans[6]==p)
cout<<ans[1]<<" "<<ans[2]<<" "<<ans[3]<<" "<<ans[4]<<" "<<ans[5];
return;
}
for(int i=1;i<11;i++)
{
if(vis[i]==0)
{
ans[n]=num[i];
vis[i]=1;
dfs(n+1);
vis[i]=0;
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
dfs(1);
}