通过一个三位数加三位数的算式学习搜索。
规则如下:
手里有1~9九张扑克牌,将这九张扑克牌放到□□□+□□□=□□□使之成立,每张牌只能使用一次,列出所有能成立的可能。
实现代码如下:
#include<stdio.h>
#include<iostream>
using namespace std;
int n=0, book[10], a[10];
int judge(int b[10]) {
if (b[1] * 100 + b[2] * 10 + b[3] + b[4] * 100 + b[5] * 10 + b[6] == b[7] * 100 + b[8] * 10 + b[9])
{
return 1;
}
return 0;
}
void dfs(int step)
{
if (step == 10) {
if (judge(a) == 1) {
cout << a[1] * 100 + a[2] * 10 + a[3] << " + "
<< a[4] * 100 + a[5] * 10 + a[6] << " = "
<< a[7] * 100 + a[8] * 10 + a[9] << endl;
n++;
}
return;
}
for (int i = 1; i <= 9; i++) {
if (book[i] == 0) {
a[step] = i;
book[i] = 1;
dfs(step + 1);
book[i] = 0;
}
}
return;
}
int main()
{
dfs(1);
cout << "一共有" << n << "个式子" << endl;
return 0;
}