一道经典的C++竞赛题

编程入门 行业动态 更新时间:2024-10-09 07:23:18

一道<a href=https://www.elefans.com/category/jswz/34/1769979.html style=经典的C++竞赛题"/>

一道经典的C++竞赛题

原文地址:一道经典的C++竞赛题 作者:xianfa110 已知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)
输出:
一个整数(满足条件的种数)
输入输出样例:
输入:
4 3
7 12 19
输出:
  1
源程序:
#include<iostream>
#include<math.h>
  const int N=21;
  using namespace std;
  int issushu(long num)
  {
      for(long i=2;i<=sqrt(num);i++)
      if(num%i==0)
          return 0;
      return 1;
  }
long totalsum(long a[],int n)
{
    long sum=0;
    for(int i=0;i<n;i++)
      sum+=a[i];
    return sum;
}
int main()
{
    cout<<endl<<"please input the number(0~20) of the numlist and the choose numbers:";
    int num=0,k=0;
    cin>>num>>k;
    cout<<"please input "<<num<<" listnum:";
    long num1[N],num2[N];
    for(int i=0;i<num;i++)
        cin>>num1[i];
    long num3=0,count=0;
    for(int j=0;j<k;j++)
      num2[j]=num1[j];
    num3=totalsum(num2,k);
    if(issushu(num3))
    count++;
    int m=0;
    long data=0;
    for(int n=0;n<k;n++)
    {
        data=num2[n];
      for(m=k;m<num;m++)
      {
          num2[n]=num1[m];
          num3=totalsum(num2,k);
          if(issushu(num3))
              count++;
      }
      num2[n]=data;
    }
    cout<<endl<<"the kinds number is:"<<count<<endl;
    return 0;
}

更多推荐

一道经典的C++竞赛题

本文发布于:2024-02-06 06:46:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1747005.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:经典   竞赛题

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!