[蓝桥杯2015初赛]三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉 + 三 羊 献 瑞 三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
#include<iostream>
using namespace std;
int vis[10] = {0};
int x[9];
int flag = 0;
// 三=x[1] 羊=x[2] 献=x[3] 瑞=x[4] 祥=x[5] 辉=x[6] 生=x[7] 气=x[8]
void dfs(int cnt) {
if(cnt==9) {
int num1 = x[5] * 1000 + x[4] * 100 + x[7] * 10 + x[6];
int num2 = x[1] * 1000 + x[2] * 100 + x[3] * 10 + x[4];
int res = x[1] * 10000 + x[2] * 1000 + x[7] * 100 + x[4] * 10 + x[8];
if (x[1]!=0 &&num1 + num2 == res) { flag = num2; cout << num1 << " " << num2 <<" "<< res << endl; }
return;
}
for (int i = 0; i < 10; i++) {
if (vis[i] != 0) continue;
x[cnt] = i;
vis[i] = 1;
dfs(cnt + 1);
vis[i] = 0;
if (flag != 0) return;
}
}
int main() {
dfs(1);
cout << flag << endl;//flag = 1085
return 0;
}