求调站外题
  • 板块学术版
  • 楼主TheSpectre_
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/11/9 12:33
  • 上次更新2023/10/27 03:39:17
查看原帖
求调站外题
635261
TheSpectre_楼主2022/11/9 12:33

题目:

已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19时,可得全部的组合与它们的和为:3+7+12=22  3+7+19=29  7+12+19=38  3+12+19=34。

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:3+7+19=29)。

代码(注释较多,请谅解:):

#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int a[100],b[100],n,k,an,as,c[100];
int ss(int a){
	int b;
	int c;
	for(int i = 2;i < a;++i){
		b = a%i;
		if(b != 0){
			if(i == ceil(sqrt(a))){
				c = 1;
				return c;
			}
		}
		if(b == 0){
			c = 0;
			return c;
		}
		
	}
	
}
/*int sz(int x,int s){
	for(int i=0;i<=s;i++){
		if(x==c[i]){
			return 1;
		}
	}
}*/
int sousuo(int sn){
	//cout<<n<<endl;
	for(int i=1;i<=k;i++){
		if(!b[i]){
			as=as+a[sn];
			b[i]=1;
			//if(sn==k){
				if(ss(as)==1){
					an++;
					c[i]=as;
					cout<<as<<endl;
				}
			//}

			else	sousuo(sn+1);
			b[i]=0;
			as=as-a[sn];
		}
	}
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		//cout<<a[i]<<" ";
	}
	sousuo(1);
	cout<<an;
}
2022/11/9 12:33
加载中...