时间限制: 1Sec 内存限制: 128MB
题目描述:(原题链接)
给定一个长度为N(0< n< =10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数。(0< k< =n)
输入:
输入格式: 第一行为2个数n,k(含义如上题) 第二行为n个数,表示这个序列
样例输入:
5 2
1 2 3 4 5
输出:
输出格式: 如果m为质数则 第一行为’YES’(没有引号) 第二行为这个数m 否则 第一行为’NO’ 第二行为这个数m
样例输出 :
YES
2
解题思路:
注意事项:
注意存在差为0,1的特殊值时,比如下面两种
输入1:
5 2
2 2 2 2 2
输出 :
NO
0
输入2:
5 2
2 2 2 3 3
输出:
NO
1
参考代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String []args) {
Scanner in =new Scanner(System.in);
int n=in.nextInt(),k=in.nextInt();
int arr[]= new int[n];
for(int i=0;i<n;i++)
arr[i]=in.nextInt();
Arrays.sort(arr);
int tmp=arr[n-k]-arr[k-1];
boolean flag=true;
if(tmp<2)
flag=false; //注意处理特殊情况
for(int i=2;i<=Math.sqrt(tmp);i++) { //判断素数
if(tmp%i==0) {
flag=false;
break;
}
}
if(flag)
System.out.println("YES");
else
System.out.println("NO");
System.out.println(tmp);
in.close();
}
}