题目:
观察下面的加法算式:
祥 瑞 生 辉 + 三 羊 献 瑞 ------------------- 三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
答案:1085
分析:
将祥瑞生辉三羊献气分别编号为01234567,在0~9范围内进行递归穷举+回溯(也就是将0~9随机分配给0~7号(不可重复))
代码:
#include<iostream>
using namespace std;
int arr[8];//将8个不同的字分别编号0~7
int vis[10];
void dfs(int cnt){
if(cnt==8){
int a = arr[0]*1000+arr[1]*100+arr[2]*10+arr[3];
int b = arr[4]*1000+arr[5]*100+arr[6]*10+arr[1];
int c = arr[4]*10000+arr[5]*1000+arr[2]*100+arr[1]*10+arr[7];
if(a+b==c && arr[0]!=0 && arr[4]!=0){//最高位不能为0
cout << arr[4] << arr[5] << arr[6] << arr[1];
}
return;
}
for(int i=0;i<10;i++){//横向0~9
if(!vis[i]){
vis[i] = 1;
arr[cnt] = i;
dfs(cnt+1);//纵向0~9
vis[i] = 0;
}
}
}
int main(){
dfs(0);
}