• 从n个数中随机选出k个数,并判断和是不是素数


    洛谷p1036

     1 #include<iostream>
     2 #include<math.h>
     3 using namespace std;
     4 int x[20],n,k;//依照题目所设
     5 bool isprime(int n){//判断是否质数
     6     int s=sqrt(double(n));
     7     for(int i=2;i<=s;i++){
     8         if(n%i==0)return false;
     9     }
    10     return true;
    11 }
    12 int rule(int choose_left_num,int already_sum,int start,int end){//choose_left_num为剩余的k,already_sum为前面累加的和,start和end为全组合剩下数字的选取范围;调用递归生成全组合,在过程中逐渐把K个数相加,当选取的数个数为0时,直接返回前面的累加和是否为质数即可
    13     if(choose_left_num==0)return isprime(already_sum);
    14     int sum=0;
    15     for(int i=start;i<=end;i++){
    16         sum+=rule(choose_left_num-1,already_sum+x[i],i+1,end);
    17     }
    18     return sum;
    19 }
    20 int main(){
    21     cin>>n>>k;
    22     for(int i =0;i<n;i++)cin>>x[i];
    23     cout<<rule(k,0,0,n-1);//调用递归解决问题
    24 }

    递归表示全排列

    非常优美的代码!

  • 相关阅读:
    WPF 便签项目
    .NET下WPF学习之Socket通信
    DEV控件
    字符串位数补足
    VS2008设置断点不命中
    错误描述: 242000021
    关闭Win10自带的 Windows Defender
    启用与关闭 Ad Hoc Distributed Queries
    Date工具类
    数据字段脱敏
  • 原文地址:https://www.cnblogs.com/fengzhongzhuifeng/p/10732799.html
Copyright © 2020-2023  润新知