• 选数


    目描述

    已知 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]”两种不同的代码作比较。

  • 相关阅读:
    ES基本介绍
    Mybatis 读写分离简单实现
    分享一个Flink checkpoint失败的问题和解决办法
    一次“内存泄露”引发的血案
    记一次堆外内存泄漏排查过程
    MySQL主从复制读写分离,看这篇就够了!
    JVM运行时内存数据区域
    .NET MVC 页面传值方式
    jQuery 对表格内容进行搜索筛选
    泛型
  • 原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/8476089.html
Copyright © 2020-2023  润新知