凑算式
题目
B DEF
A + --- + ----- = 10
C GHI
这个算式中AI代表19的数字,不同的字母代表不同的数字。
求一共有多少种解法?(29种)
思路
借鉴自博客文章
- 暴力枚举(略)
- DFS(深度优先搜索)
- 总体经过9次遍历
- visit为遍历数组,初始化visit[]为0
- 当遍历到visit[i]为1,便将该i位置的a数组设为遍历数字,再进入下层dfs遍历中,当遍历次数大于9时,确定a中9个数字是否全部相等,然后分局算式判断是否符合条件,如果1,那么count++。
代码如下
/*
凑算式:DFS(深度优先搜索)
*/
#include <iostream>
using namespace std;
int a[10];//1-9
int visit[10];//1-9
int count=0;
void dfs(int index)
{
if(index>9)
{
for(int i=1;i<=9;i++)//判断这9个数字是否重复 ,重复则返回
{
for(int j=i+1;j<=9;j++)
{
if(a[i]==a[j])return;
}
}
int t=(a[7]*100+a[8]*10+a[9])*(a[1]*a[3]+a[2]-10*a[3])+a[3]*(a[4]*100+a[5]*10+a[6]);
if(t==0)
{
count++;
}
}
for(int i=1;i<=9;i++)
{
if(visit[i]==0)
{
visit[i]=1;
a[index]=i;
dfs(index+1);
visit[i]=0;
}
}
}
int main()
{
dfs(1);
cout<<count;
return 0;
}