不会啊这题,完全不知道要怎么入手
给定等式 ABCDE
DFG
+ DFG
-------------
XYZDE
其中每个字母代表一个数字,且不同数字对应不同字母。编程求出这些数字并且打出这个数字的 算术计算竖式。
这题怎么做啊?
#include <iostream>
#include <algorithm>
using namespace std;
int x[10];
int used[10];
void dfs(int d)
{
if(d==10){
int a=0,i;
for(i=0;i<5;i++){
a=a*10+x[i];
}
int b=x[3];
for(i=5;i<7;i++){
b=b*10+x[i];
}
int c=0;
for(i=7;i<10;i++){
c=c*10+x[i];
}
c=(c*10+x[3])*10+x[4];
if(a+b+b==c){
printf(\"%d+%d+%d=%d\n\",a,b,b,c);
}
}
else {
for(int i=0;i<10;i++){
if(!used[i]){
used[i]=1;
x[d]=i;
dfs(d+1);
used[i]=0;
}
}
}
}
int main()
{
dfs(0);
}
深度优先搜索策略,穷举ABCDEFGXYZ的所有排列,将其存放在x[]中。
参考:http://www.baidu.com/s?tn=myie2dg&ie=gb2312&bs=DFS%CB%E3%B7%A8+%C9%FA%B3%C9%C5%C5%C1%D0&sr=&z=&cl=3&f=8&wd=DFS+%C9%FA%B3%C9%C5%C5%C1%D0&ct=0