zoukankan      html  css  js  c++  java
  • 选数

    目描述

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

    输出格式:

    屏幕输出,格式为:

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

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    int a[1000];
    int ans=0;
    int b[1000];
    int prime(int n){
        for(int i=2;i<=sqrt(n);i++){
            if(n%i==0){
                return 0;
            }
        }
        return 1;
    }/*判断是否是素数的函数*/
    void zuhe(int n,int k){
        for(int i=n;i>=k;i--){
            b[k]=i;/*记录a[i]的下标*/
            if(k==1){
                int sum=0;
                for(int j=b[0];j>=1;j--) sum+=a[b[j]];
                if(prime(sum)) {
                    ans++;
                }
            }
            else zuhe(i-1,k-1);/*k-1为计算下个数*/            
        }
        
    }
    int main(){
        int n,k;
        scanf("%d%d",&n,&k);
        b[0]=k;
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        zuhe(n,k);
        cout<<ans;
    }

    核心代码,主要是理解中间的“zuhe(i-1,k-1);”这一句的含义。

    以及,“b[k]=i;/*记录a[i]的下标*/”的用处,和对后面程序的影响;并且与写成“b[k]=a[i]”两种不同的代码作比较。

  • 相关阅读:
    C# 反射
    WinForm资源管理器开发(TreeView&ListView)
    枚举——完美立方
    关于考证
    人工智能时代,程序员要不要精通算法?
    程序员需要掌握哪些软技能?
    Android数据解析——JSON
    C# 数组转json
    jQuery跨域调用Web API
    oracle 创建表同时添加注释
  • 原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/8476089.html
Copyright © 2011-2022 走看看