【递归入门】组合+判断素数
2017-11-15 14:00
141 查看
【递归入门】组合+判断素数
题目描述
输入
输出
样例输入
样例输出
题目描述
已知 n 个整数b1,b2,…,bn 以及一个整数 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。
输入
第一行两个整数:n , k (1<=n<=20,k<n) 第二行n个整数:x1,x2,…,xn (1<=xi<=5000000)
输出
一个整数(满足条件的方案数)。
样例输入
4 3 3 7 12 19
样例输出
1
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; const int maxn=21; int arr[maxn]={0}; int rec[maxn]={0}; int N,K; bool is_sushu(int n) { for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { return false; } } return true; } int sum() { int sum=0; for(int i=0;i<K;i++) { sum+=rec[i]; } return sum; } int time=0; void dfs(int arr[],int n,int r,int k1,int k2 ) { if(k1==r) { if(is_sushu(sum())) { // for(int i=0;i<r;i++) // { // cout<<rec[i]<<" "; // // } // cout<<endl; // // int ab=sum(); // cout<<ab<<endl; time++; } return; } else { for(int i=k2;i<n;i++) { rec[k1]=arr[i]; dfs(arr,n,r,k1+1,i+1); } } } int main() { cin>>N>>K; for(int i=0;i<N;i++) { cin>>arr[i]; } dfs(arr,N,K,0,0); cout<<time<<endl; return 0; }
相关文章推荐
- 【递归入门】组合+判断素数
- 5974 Problem C 【递归入门】组合+判断素数
- 【递归入门】组合的输出
- 5973 Problem B 【递归入门】组合的输出
- 简单易懂的程序语言入门小册子(4):基于文本替换的解释器,递归,如何构造递归函数,Y组合子
- 1033: 递归3(组合+判断素数)
- [递归入门] 组合数
- 【递归入门】组合的输出
- caioj1033:递归3(组合+判断素数)
- 递归入门:判断回文字符串
- 非递归枚举排列组合(C++)
- 华为笔试.利用递归进行穷举123456的所有组合情况
- 递归组合
- 用递归进行排列组合
- 递归实现数字的组合(C++)
- 求n的阶乘(递归&&非递归),Fibonacci函数,二分法查找,汉诺塔实现,排列组合,整数划分,一元多项式的加减乘
- C++递归问题之三---0-1背包问题:给定两个值value和num,在1到num之间取值使这些数和为value,输出所有组合
- 递归求解一组元素的所有排列情况&包含m个元素的组合情况&网易笔试题-合唱团
- 递归的入门介绍
- C++实现递归实现数字的组合