方法一:DFS 全排列
#include<bits/stdc++.h>
using namespace std;
const int N=15;
bool used[N]; //记录该数字是否被使用过
int num[N]; //保存全排列的结果
int cnt; //计数
void dfs(int n){
if(n==10){
int A = num[1];
int B = num[2];
int C = num[3];
int DEF = num[4] * 100 + num[5] * 10 + num[6];
int GHI = num[7] * 100 + num[8] * 10 + num[9];
if(A * C * GHI + B * GHI + DEF * C == 10 * C * GHI){
cnt++;
return;
}
}
//搜索 全排列1~9
for(int i = 1;i <= 9; i++){
if(!used[i]){
used[i] = true;
num[n] = i;
dfs(n+1);
used[i] = false; //恢复现场
}
}
}
int main(){
dfs(1);
cout<<cnt<<endl;
return 0;
}方法二: 利用STL 函数:next_permutation()
#include<bits/stdc++.h>
using namespace std;
int num[]={1,2,3,4,5,6,7,8,9};
int A,B,C,DEF,GHI;
int cnt;
int main(){
while(next_permutation(num,num+9)){
A=num[0]; B=num[1]; C=num[2];
DEF=num[3]*100+num[4]*10+num[5];
GHI=num[6]*100+num[7]*10+num[8];
if(A * C * GHI + B * GHI + DEF * C == 10 * C * GHI){
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}`
0 回复
0 转发
3 喜欢
2 阅读



