题解 | #素数伴侣#
素数伴侣
https://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while(in.hasNext()){
int size = in.nextInt();
int[] nums = new int[size];
List<Integer> odds = new ArrayList<>();
List<Integer> evens = new ArrayList<>();
for(int i=0 ; i<size ; ++i){
nums[i] = in.nextInt();
if(nums[i] % 2 == 0){
evens.add(nums[i]);
}
else{
odds.add(nums[i]);
}
}
int[] matchEven = new int[evens.size()]; //用于存放匹配的偶数,下标对应偶数的下标,元素为当前下标偶数匹配的奇数
int count = 0;
for(int i=0 ; i<odds.size() ; ++i){
boolean[] v = new boolean[evens.size()];
if(find(matchEven, v, odds.get(i), evens)){
++count;
}
}
System.out.println(count);
}
}
public static boolean isPrime(int num){
if(num == 1){
return false;
}
for(int i=2 ; i<=Math.sqrt(num) ; ++i){
if(num % i == 0){
return false;
}
}
return true;
}
public static boolean find(int[] matchEven, boolean[] v, int odd, List<Integer> evens){
for(int i=0 ; i<evens.size() ; ++i){
if(isPrime(evens.get(i)+odd) && v[i] == false){
v[i] = true;
if(matchEven[i] == 0 || find(matchEven, v, matchEven[i], evens)){
matchEven[i] = odd;
return true;
}
}
}
return false;
}
}
查看8道真题和解析