问题描述:
祥、瑞、生、辉、三、羊、献、气为0~9的任意不重复的数字,需要根据以上的等式得到“祥瑞生辉”的具体可能值为多少。
求解思路:
使用经典的回溯法的思路,用int a[8]来记录祥、瑞、生、辉、三、羊、献、气的值,用bool b[10]来记录0~9这10个数字是否已经给使用,在回溯的过程中适当运用剪枝来加速程序的运行速度(祥 不为 0,三 不为 0)。
C++代码:
#include<iostream>
using namespace std;
int a[8];
bool b[10];
void dfs(int cur) {
if (cur == 8) {
int x = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
int y = a[4] * 1000 + a[5] * 100 + a[6] * 10 + a[1];
int z = a[4] * 10000 + a[5] * 1000 + a[2] * 100 + a[1] * 10 + a[7];
if (x + y == z)
cout << x << endl;
return;
}
else {
for (int i = 0; i < 10; i++) {
if (i == 0 && cur == 0) continue; //祥不为0
if (i == 0 && cur == 4) continue; //三不为0
if (!b[i]) {
b[i] = 1;
a[cur] = i;
dfs(cur + 1);
b[i] = 0;
}
}
}
}
int main() {
dfs(0);
return 0;
}