【深度优先搜索】练习题:填数字
填数字
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714就是一种解法,
这个算式一共有多少种解法?
b def
a + - + --- = 10
c ghi
输出
输出一个整数,表示算式的解的总数。
答案:
using namespace std;
int a[11],cnt;
bool b[11];
void dfs(int step)
{
if(step == 10 )
{
float sum1 = a[2];
float sum2 = a[4] * 100 + a[5] * 10 + a[6];
float sum3 = a[7] * 100 + a[8] * 10 + a[9];
if(a[1] + sum1 / a[3] + sum2 / sum3 == 10)
{
cnt++;
}
return;
}
for(int i = 1;i<=9;i++)
{
if(b[i] == 0)
{
a[step] = i;
b[i] = 1;
dfs(step + 1);
b[i] = 0;
}
}
}
int main()
{
dfs(1);
cout<<cnt;
return 0;
}