题目链接:
http://www.dotcpp.com/oj/problem.php?id=1268解题思路:
首先,对这组数据进行从小到大排序,拍好后,第k大的数字是a[n-k],可以推一下,第一大是a[n-1],其次a[n-2]........a[n-k],第一小的数字是a[0],而不是a[1],其次a[1],a[2].......a[k-1];temp = a[n-k] - a[k-1]
注意事项:数组最少开到10001,防止溢出,同时要注意temp的条件,是否大于等于2
参考代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define MAX 10003
using namespace std;
int main()
{
int a[MAX];
int n,k,i;
int temp;
scanf("%d %d",&n,&k);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
temp = a[n-k] - a[k-1];
for(i = 2;i < sqrt(temp);i++)
{
if(temp%i==0) break;
}
if(i>=sqrt(temp)&&temp>=2) printf("YES\n%d",temp);
else printf("NO\n%d",temp);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复