题目链接:http://www.tyvj.cn/p/1001
题目描述:给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数。(0<k<=n)
题解:这题考察排序以及枚举算法。先使用sort排序将序列由小到大排序(其他的排序也可以),然后取第n-k+1个数与第k个数的差。特判3以内的数(是2则是素数,否则不是)。从2开始枚举i,如果差被i整除,则不是,否则是。
代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<cstdlib> 4 #include<algorithm> 5 using namespace std; 6 int n,k,num; 7 int a[10010]; 8 bool cmp(int a,int b){ 9 return a<b; 10 } 11 int main(){ 12 scanf("%d%d",&n,&k); 13 int i,j; 14 for(i=1;i<=n;i++){ 15 scanf("%d",a+i); 16 } 17 sort(a+1,a+1+n,cmp); 18 num=a[n-k+1]-a[k]; 19 if(num<3){ 20 if(num==2){ 21 printf("YES\n"); 22 printf("%d\n",num);return 0; 23 } 24 else{ 25 printf("NO\n"); 26 printf("%d\n",num);return 0; 27 } 28 } 29 for(i=2;i<num;i++){ 30 if(num%i==0){ 31 printf("NO\n");break ; 32 } 33 if(i==num-1){ 34 printf("YES\n");break ; 35 } 36 } 37 printf("%d\n",num); 38 return 0; 39 }