返回题解分享
讨论 / 题解分享/ 帖子详情

凑算式(结果填空) - 题解

方法一: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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!