根据题目:给定n个数字,找出前m大的数字。 输入 多组输入,每组输入格式如下。 第一行包含两个整数n m。(n<=100000, m>0) 第二行包含n个正整数。 输出 输出前m大的数字,若m>n输出ERROR。每组输出占一行。对代码进行改正#include<stdio.h> int main() { int a[100][2],b[100000],i=0,j,k=0,t,m,n; while(scanf("%d %d",&a[i][0],&a[i][1])!=EOF) { for(j=0;j<a[i][0];j++) {scanf("%d",&b[j]);} i++;k++; } for(i=0;i<k;i++) { if(a[i][0]<a[i][1]) { printf("ERROR\n"); continue; } for(j=0;j<a[i][1];j++) { t=j; for(m=j+1;m<a[i][0];m++) { if(b[m]>b[t]) {t=m;} } n=b[j]; b[j]=b[t]; b[t]=n; } for(j=0;j<a[i][1]-1;j++) {printf("%d ",b[j]);} printf("%d\n",b[a[i][1]-1]); } return 0; }
时间: 2024-01-31 09:03:40 浏览: 31
这段代码存在一些问题,我给你列出来:
1.数组定义时,第一个维度的大小不足以容纳多组输入;
2.输入格式有误,每组输入应该是n个数字,不是两个数字;
3.当输入的n小于m时,输出"ERROR",但并没有停止程序运行;
4.排序算法使用了简单选择排序,时间复杂度为O(n^2),不适合处理大量数据。
下面是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
// 比较函数,用于qsort排序
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int n, m;
int a[MAX_N];
while (scanf("%d %d", &n, &m) == 2) {
if (n < m) {
printf("ERROR\n");
continue;
}
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp);
for (int i = 0; i < m - 1; i++) {
printf("%d ", a[i]);
}
printf("%d\n", a[m - 1]);
}
return 0;
}
```
修改后的代码使用了快速排序算法qsort,时间复杂度为O(nlogn),更适合处理大量数据。同时,修改了输入格式,并且当n小于m时,立即输出错误信息并进入下一组输入。