C语言:给定n个数字,找出前m大的数字。 输入 多组输入,每组输入格式如下。 第一行包含两个整数n m。(n<=100000, m>0) 第二行包含n个正整数。 输出 输出前m大的数字,若m>n输出ERROR。每组输出占一行。
时间: 2024-03-18 14:40:40 浏览: 251
我们第一行包括两个整数n,k(1<=n<=100,k<=6e5),表示有n个数字,目标和为k 第二行输入n个整数(c1 c2
这是一道经典的算法题,可以使用堆排序来解决。
C语言代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int n, m, a[MAX_N];
while (scanf("%d%d", &n, &m) == 2) {
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
if (m > n) {
printf("ERROR\n");
continue;
}
qsort(a, n, sizeof(int), cmp);
for (int i = 0; i < m; ++i) {
printf("%d\n", a[i]);
}
}
return 0;
}
```
时间复杂度为O(nlogn),可以通过本题。
阅读全文