XYNUOJ 1225: 查找最小的k个元素

                                           1225: 查找最小的k个元素

                                                                     时间限制: 1 Sec  内存限制: 32 MB

题目描述

输入n个正整数(可以有重复的情况出现),输出其中最小的k个(如有重复的情况出现,重复输出),其中1≤k≤n≤10000,每个正整数小于10000。例如输入1、4、8、2、5、7、6、3这8个数字,则最小的4个数字为1、2、3、4。

输入

第一行,n和k,用空格隔开。

n个整数,用空格隔开。

输出

最小的k个正整数,且从小到大排序,用空格隔开。

样例输入

8 4
1 2 3 4 5 6 7 8

样例输出

1 2 3 4

AC代码: 

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
	int m,n,a[10001],i,j;
	scanf("%d%d",&m,&n);
	for(i=1;i<=m;i++) scanf("%d",&a[i]);
	sort(a+1,a+m+1);
	for(i=1;i<n;i++) printf("%d ",a[i]);       //1 - (n-1) 少输出一次 
	for(j=i;j<=n;j++){                         //第n次判断是否有重复输出 
		if(a[j]==a[j+1])printf("%d ",a[j]);    //有的话继续带空格的输出 
		else{                                  //知道不再重复,换行结束 
			printf("%d\n",a[j]);
			break;
		}
	}
	return 0;
} 

对这题来说,基础的快速排序就能完成,但还有很多拓展知识:

堆排和快排

TOP K问题的多种解法

猜你喜欢

转载自blog.csdn.net/qq_30007603/article/details/81412286
今日推荐