P1036 [NOIP 2002 普及组] 选数 题解 c++
题的网址
https://www.luogu.com.cn/problem/solution/P1036
点击查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
int n,k,a[101],so=0;//so计数器
int ou(int f){
for(int i=2;i*i<=f;i++){//10-16 判断质数
if(f%i==0){
return false;//false 假
}
}
return true; //true 真
}
void op(int t,int s,int jd){
//t表示用了几个数
//s表示使用的数的和
//jd表示我该从第几位开始找数字
if(t==k){//先运行下面的for循环 直到找出相符的值
if(ou(s))
so++;//记数器加1
return ;
}
for(int i=jd;i<=n;i++){ //例如 t=3 走了3个数 s=a【1】+a[2]+a[3]
op(t+1,s+a[i],i+1); //jd=3
}
}
int main(){
cin>>n>>k;//输入n和k的值
for(int i=1;i<=n;i++){
cin>>a[i];//输入a[i] 的值
}
op(0,0,1);//设void()内的值
cout<<so;//输出记数器的值
return 0;
}