📜  C测验– 104 |问题1(1)

📅  最后修改于: 2023-12-03 14:40:26.084000             🧑  作者: Mango

C测验 - 104 | 问题1

简介

本测验是一道C语言编程题,要求为给定的整数数组中查找最大的K个数,并将它们按降序输出。

问题描述

给定一个包含n个整数的数组a[],以及一个正整数k。在这个数组中,查找最大的k个数,并将它们按降序输出。数组a[]中可能包含重复数字,输出的最大数字可能有多个,输出的数字顺序不做要求,只需要降序输出即可。

代码实现

以下为一种可能的实现方法,时间复杂度为O(nlogn)。

#include <stdio.h>
#include <stdlib.h>

// 比较函数用于快排
int cmp(const void *a, const void *b) {
    return *(int *)b - *(int *)a;
}

int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    int a[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    qsort(a, n, sizeof(int), cmp);  // 快排

    int cnt = 0, i = 0;
    while (cnt < k && i < n) {  // 输出前k大的数
        if (a[i] != a[i-1]) {  // 避免重复
            printf("%d ", a[i]);
            cnt++;
        }
        i++;
    }

    return 0;
}
总结

本题需要对快排函数和数组操作比较熟练,同时还需要注意根据题意处理重复数字的情况。