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

    题目描述

    已知 nn 个整数 x_1,x_2,…,x_nx1,x2,,xn,以及11个整数kk(k<nk<n)。从nn个整数中任选kk个整数相加,可分别得到一系列的和。例如当n=4,k=3n=4,k=3,44个整数分别为3,7,12,193,7,12,19时,可得全部的组合与它们的和为:

    3+7+12=223+7+12=22

    3+7+19=293+7+19=29

    7+12+19=387+12+19=38

    3+12+19=343+12+19=34。

    现在,要求你计算出和为素数共有多少种。

    例如上例,只有一种的和为素数:3+7+19=293+7+19=29。

    输入格式

    键盘输入,格式为:

    n,kn,k(1 le n le 20,k<n1n20,k<n)

    x_1,x_2,…,x_n (1 le x_i le 5000000)x1,x2,,xn(1xi5000000)

    输出格式

    屏幕输出,格式为: 11个整数(满足条件的种数)。

    输入输出样例

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

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,k;
    int s[25];
    bool a[25];
    int sum=0,tot=0;

    int prime(int x)
    {
    if(x==1||x==0)return 0;
    for(int i=2;i<=sqrt(x);i+=1)

    if(x%i==0)
    return 0;
    return 1;
    }

    int dfs(int x,int y)
    {

    for(int i = y; i <= n;i++)
    {
    if(a[i]=true)
    {
    a[i]=false;
    sum+=s[i];
    if(x==k)
    {
    if(prime(sum)) tot++;
    }
    else dfs(x+1,i+1);//i+1避免选择重复

    sum-=s[i];
    a[i]=true;
    }
    }
    }

    int main()
    {
    scanf("%d%d",&n,&k);
    for(int i = 1;i <= n; i ++)
    {
    scanf("%d",&s[i]);
    a[i]=true;
    }
    dfs(1,1);
    printf("%d",tot);
    }

    Try and fail,but don't fail to try; 失败是成功之母
  • 相关阅读:
    对MySql查询缓存及SQL Server过程缓存的理解及总结
    PhpStorm中如何使用database工具,详细操作方法
    zookeeper 操作命令
    关于 php for zookeeper
    摘抄 <关于 作为>
    php 各种扩展
    http与tcp
    PHP 优化之php -fpm 进程
    MYSQL explain详解[转载]
    各种注释[转载]
  • 原文地址:https://www.cnblogs.com/Youio-bolg/p/11330815.html
Copyright © 2011-2022 走看看