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;
}
posted @ 2025-07-15 18:22  chang507  阅读(14)  评论(0)    收藏  举报