如图,这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
答案
29
解题过程
用A[9]存储1~9,用B[i]表示A~I(下标i从0~8分别代表A~I的值),用dfs每次更替B[i]中的值,在通过is_true()判断算式是否成立。
附上代码
#include<iostream>
using namespace std;
int a[9]={1,2,3,4,5,6,7,8,9};//代表A~I
int b[9]={0};//存储每次A~I所代表的值,其中
int vis[9]={0};//0-没访问
int counts=0;
int main()
{
void dfs(int);
dfs(0);
cout<<counts<<endl;
return 0;
}
bool is_true()
{
int GHI=b[6]*100+b[7]*10+b[8];
int DEF=b[3]*100+b[4]*10+b[5];
if(b[0]*b[2]*GHI+b[1]*GHI+b[2]*DEF==b[2]*GHI*10)
return true;
return false;
}
void dfs(int index)
{
if(index==9)
{
if(is_true())
counts++;
return;
}
for(int i=0;i<9;i++)
{
if(vis[i]==0)
{
vis[i]=1;
b[index]=a[i];
dfs(index+1);
vis[i]=0;
}
}
}