解题思路:

    本来想用快速排序法的,可是时间超时了,有大佬解释一下吗?

注意事项:

参考代码:

#include <stdio.h>

#include <string.h>

int a[10001];

int n;

void change(int *p,int *q)//交换两个数 

{

 int buff;

 buff = *p;

 *p = *q;

 *q = buff; 

} 

int sushu(int a)//判断素数 

{

 int i;

 if(a < 2)

  return 0;

 if(a == 2)

  return 1;

 for(i = 2; i*i < a; i++)

 {

  if(a % i == 0)

   return 0;

 }

 return 1;

}

void qucksort(int left,int right)//快速排序 

{

 int i,j,temp;

 i = left;

 j = right;

 temp = a[left];

 if(left > right)

  return;

 while(i != j)

 {

  //先从右到左找,找小于基准值的 

  while(a[j] > temp && i < j)

   j--;

  while(a[i] < temp && i < j)

   i++;

  if(i < j)

   change(&a[i],&a[j]);

 }

 change(&temp,&a[i]);

 qucksort(left,i-1);

 qucksort(i+1,right); 

}

void paixu()//冒泡排序 

{

 int i,j;

 for(i = 0; i < n-1; i++)

  for(j = 0; j < n - i -1; j++)

  {

   if(a[j] > a[j+1])

    change(&a[j],&a[j+1]);

  }

}

int main()

{

 int i,k,shu;

 memset(a,0,sizeof(a));

 while(scanf("%d%d",&n,&k) == 2)

 {

  for(i = 0; i < n; i++)

  scanf("%d",&a[i]);

  paixu();

  //qucksort(0,n-1);

  shu = a[n-k] - a[k-1];

  if(sushu(shu))

   printf("YES\n"); 

  else

   printf("NO\n");

  printf("%d\n",shu);

 }

 return 0;

 }


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论