用的dfs,测试的结果会少很多情况 代码很短有详细的注释
查看原帖
用的dfs,测试的结果会少很多情况 代码很短有详细的注释
272309
QODGOD楼主2021/2/1 22:44
#include <bits/stdc++.h>
using namespace std;
int n,k,a[100];
int sum=0,ans=0;
bool check(int sum){//判断是否是素数 
	for(int i=1;i<=sum/2;i++){
		if(i==1) continue;
		else{
			if(sum%i==0) return false; 
		}
	}
	return true;
}
void dfs(int x,int t,int sum){//x是当前判断第几个数,t是现在已经加了几个数,sum是现在t个数的和 
	if(x>n) return;//超出n个数后返回 
	if(t==k){//加了k个数后判断是否为素数 
		cout<<sum<<endl;//测试用 
		if(check(sum)) ans++;
		return;
	}
	dfs(x+1,t+1,sum+a[x]);//加上当前这个数或者不加当前这个数 
	dfs(x+1,t,sum);
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	dfs(1,0,0);//从第一个数开始,当前加了0个数,和为1 
	cout<<ans<<endl;
	return 0;
	
} 
2021/2/1 22:44
加载中...