zoukankan      html  css  js  c++  java
  • 从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 }

    递归表示全排列

    非常优美的代码!

  • 相关阅读:
    构造方法
    $this
    public/private/protected三种访问控制符的区别
    vsftpd的虚拟主机配置,错误记录
    高斯模糊css
    css绘制三角形
    禁止缩放的一行代码
    自适应的Javascript代码resize.js
    判断是pc端还是手机端js
    倒计时
  • 原文地址:https://www.cnblogs.com/fengzhongzhuifeng/p/10732799.html
Copyright © 2011-2022 走看看