题目:有三个三位数满足以下等式:XYZ+ABC=EFG,其中每三位个数由三个数组成,XYZABCEFG的范围是1-9,不可重复
思路如下
先套用DFS模板
void dfs(int step){
//判断边界
//遍历每一种可能
for(i=1;i<=n;i++){
//继续下一步
dfs(step+1)
}
//返回
}
我们可以写出伪代码
void dfs(int step){
//判断边界
如果是第十个数,就判断是否满足等式,退出
//遍历每一种可能
for(i=1;i<=9;i++){
判断这个数是否用过,如果没用过
//继续下一步
dfs(step+1)
}
//返回
}
总代码如下:
//有三个三位数满足以下等式:XYZ+ABC=EFG,其中每三位个数由三个数组成,每个数的范围是1-9
#include <iostream>
using namespace std;
//a是最后排列的数组,flag标志这个数是否被用过,count计算总共多少个等式满足
int a[10], flag[10], count;
void DFS(int step) {
int i;
if (step == 10) {
if (a[1] * 100 + a[2] * 10 + a[3] + a[4] * 100 + a[5] * 10 + a[6] == a[7] * 100 + a[8] * 10 + a[9]) {
count++;
// printf("%d%d%d+%d%d%d=%d%d%d\n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
}
return ;
}
for (i = 1; i <= 9; i++) {
if (flag[i] == 0) {
a[step] = i;
flag[i] = 1;
DFS(step + 1);
flag[i] = 0;
}
}
return ;
}
int main() {
DFS(1);
//因为 A + B = C 和 B + A = C 是一样的
cout << count / 2;
return 0;
}