C语言输入n,k及n个不超过10000的,按从大到小输出前k个数
时间: 2024-10-14 11:05:52 浏览: 17
在C语言中,你可以使用数组和动态内存分配以及一些基本的排序算法(如选择排序或者快速选择)来实现这个功能。这里提供一个简单的示例,使用选择排序找出并输出最大的k个数:
```c
#include <stdio.h>
// 使用数组存储数据
int* findTopK(int n, int k) {
int* arr = (int*)malloc(n * sizeof(int));
if (!arr) {
printf("Memory allocation failed.\n");
return NULL;
}
// 输入n个数
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 对数组进行排序,取前k个最大值
for (int i = 0; i < n - k; i++) {
int max_idx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] > arr[max_idx]) {
max_idx = j;
}
}
if (i != max_idx) { // 如果不是最大的元素,则交换位置
int temp = arr[i];
arr[i] = arr[max_idx];
arr[max_idx] = temp;
}
}
// 输出前k个数
for (int i = 0; i < k; i++) {
printf("%d ", arr[n - i - 1]);
}
printf("\n");
free(arr);
return NULL; // 因为不需要返回数组,所以这里可以删除,仅作演示
}
int main() {
int n, k;
printf("Enter the number of elements (n): ");
scanf("%d", &n);
printf("Enter the value of k: ");
scanf("%d", &k);
if (k <= 0 || k > n) {
printf("Invalid input: k should be between 1 and n.\n");
return 1;
}
findTopK(n, k);
return 0;
}
```
在这个程序中,我们首先输入n个整数,然后通过选择排序找到最大的k个数,并将它们打印出来。
阅读全文