zoukankan      html  css  js  c++  java
  • P1036 选数

    题目描述

    已知 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)。

    输入输出格式

    输入格式:
    键盘输入,格式为:

    n , k (1<=n<=20,k<n)

    x1,x2,…,xn (1<=xi<=5000000)

    输出格式:
    屏幕输出,格式为:

    一个整数(满足条件的种数)。

    输入输出样例

    输入样例#1: 复制
    4 3
    3 7 12 19
    输出样例#1: 复制
    1

    #include<iostream>
    #include<cmath>
    using namespace std;
    int a[21], b[21];
    int sum=0,s=0;
    int fun1(int x)
    {
        if(x<=1)
            return 0;
        for(int i=2;i<=sqrt(x);i++)
            if(x%i==0)
            return 0;
        return 1;
    }
    int fun(int n,int m,const int M)
    {
        for(int j=n;j>=m;j--)
        {
            b[m-1]=j-1;
            if(m>1)
                fun(j-1,m-1,M);//用到了递归思想
            else
            {
                for(int i=M-1;i>=0;i--)
                {
                    sum+=a[b[i]+1];
                }
                if(fun1(sum))
                    s++;
                sum=0;
            }
        }
        return 0;
    }
    
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=0;i<n;i++)
            cin>>a[i+1];
        const int M=m;
        fun(n,m,M);
        cout<<s;
        return 0;
    }
    

    递归组合数

  • 相关阅读:
    Git中使用.gitignore忽略文件的推送
    git stash详解
    Git撤销&回滚操作(git reset 和 get revert)
    git rebase和git merge的区别
    git撤销已经push到远程仓库上的代码
    Git Merge
    git cherry-pick 教程
    Failed to start LSB: Bring up/down错误解决方法
    linux centos7安装部署gitlab服务器
    CentOs7 HP找回root密码
  • 原文地址:https://www.cnblogs.com/ZCWang/p/12507498.html
Copyright © 2011-2022 走看看