题解 | #[NOIP2002]选数#

[NOIP2002]选数

https://ac.nowcoder.com/acm/problem/16706

解决此题的关键在于如何使用“排列组合”。我们要从N中取M个数,后进行相加,其次再判断是否为素数。我们先用n接收所有的数的个数,用k来接收需要选取的个数。其实我们构造函数dp(),并传入三个参数,依次为num,sum,i,当num==k时,证明完成了一组(三个数之和),接下里我们来判断是否为素数,这里我们用一个方法来判断,其实不用方法也行,根据自己的需求能解出题目即可,即可完成此题

import java.util.Scanner;
public class Main {

static int n, k, ans, a[];
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    n = sc.nextInt();
    k = sc.nextInt();
    a = new int[n];
    for(int i = 0; i < n; i++) {
        a[i] = sc.nextInt();
    }
    dp(0, 0, 0);
    System.out.println(ans);
}
public static boolean isPrime(int x) {
    for(int i = 2; i * i < x; i++) {
        if(x % i == 0) {
            return false;
        }
    }
    return true;
}
public static void dp(int num, int sum, int i) {
    if(num != k) {
        for(; i < n; i++) {
            dp(num + 1 , sum + a[i], i + 1);
        }
    }
    else {
    	if(isPrime(sum)) {
    		ans++;
    	}
    }
}

}

全部评论

相关推荐

宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
下个早班:秒挂就是不缺人
点赞 评论 收藏
分享
Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务