P1036 选数

题目:

 

 思路:

1.递归

设置三个变量分别是 当前下标,当前总和,当前加的数字个数

代码如下:

#include<cstdio> 
#include<cmath>
#include<iostream>
using namespace std;
int n,k,t,sum=0;
int a[25];
//列举 判断是否为素数 
bool is(int b){
	for(int i=2;i<=sqrt(b);i++)
	if(b%i==0)
	return false;
	return true;
}
//f加上的个数 
//s开始的下标 
//t当前的总和 
void dfs(int s,int t,int f){
	if(s==n+1||f==k)
	{	if(is(t)&&f==k)
		sum++;
		return;
	}
	dfs(s+1,t+a[s],f+1) ;
	dfs(s+1,t,f);
}
main() {
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	dfs(1,0,0);
	cout<<sum;
	return 0;
}
//4 3
//10 11 12 13
//0

  

无聊就学习 反正没事干
原文地址:https://www.cnblogs.com/miao-xixixi/p/13995324.html