zoukankan      html  css  js  c++  java
  • 洛谷 P1036.选数

    洛谷 P1036.选数

    题目描述

    已知 n 个整数 x1,x2,…,x​,以及1个整数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个整数(满足条件的种数)。

    输入输出样例

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

    题目思路

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 30;
    int a[N], n, k;
    
    bool zs(int num)    //求质数
    {
    	int n = sqrt(num);
    	for (int i = 2; i <= n; i++)
    	{
    		if (!(num % i))
    			return false;
    	}
    	return true;
    }
    //idx角标 sum和 num还需要多少个数
    int fun(int idx, int sum, int num)
    {
    	int res = 0;
    	sum += a[idx];
    	num--;
    	if (num)
    	{
    		int max = n-num+1;
    		for (int i = idx + 1; i < max; i++)
    		{
    			res += fun(i, sum, num);
    		}
    	}
    	else
    	{
    		if (zs(sum))
    			return 1;
    	}
    	return res;
    }
    
    int main()
    {
    	scanf("%d%d", &n, &k);
    	for (int i = 0; i < n; i++)scanf("%d", &a[i]);
    	int res = 0;
    	for (int i = 0; i <= n - k; i++)
    		res += fun(i, 0, k);
    	printf("%d", res);
    	return 0;
    }
    
  • 相关阅读:
    第四周进度条
    单元测试
    第四周开发日志(psp)
    软件工程个人作业03
    第四周课堂作业——单元测试
    进度条 第三周
    开发日志
    软件工程个人作业2
    《构建之法》阅读笔记01
    第一二周进度条
  • 原文地址:https://www.cnblogs.com/fsh001/p/12320997.html
Copyright © 2011-2022 走看看