题解 | 素数伴侣

素数伴侣

https://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e

import java.util.*;

public class Main {
    // 判断是否为素数
    private static boolean isPrime(int num) {
        if (num < 2) return false;
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        return true;
    }
    
    // 使用匈牙利算法寻找最大匹配
    private static boolean find(int x, boolean[] used, int[] match, List<Integer> odds, List<Integer> evens) {
        for (int i = 0; i < evens.size(); i++) {
            if (!used[i] && isPrime(odds.get(x) + evens.get(i))) {
                used[i] = true;
                if (match[i] == -1 || find(match[i], used, match, odds, evens)) {
                    match[i] = x;
                    return true;
                }
            }
        }
        return false;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        // 将输入数字分为奇数组和偶数组
        List<Integer> odds = new ArrayList<>();
        List<Integer> evens = new ArrayList<>();
        
        for (int i = 0; i < n; i++) {
            int num = sc.nextInt();
            if (num % 2 == 0) {
                evens.add(num);
            } else {
                odds.add(num);
            }
        }
        
        int[] match = new int[evens.size()];
        Arrays.fill(match, -1);
        int count = 0;
        
        // 对每个奇数尝试匹配
        for (int i = 0; i < odds.size(); i++) {
            boolean[] used = new boolean[evens.size()];
            if (find(i, used, match, odds, evens)) {
                count++;
            }
        }
        
        System.out.println(count);
        sc.close();
    }
}

全部评论

相关推荐

nus22016021404:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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