题目描述
现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。
输入
第一行为n和k; 第二行开始为n个正整数的值,整数间用空格隔开。
输出
第k个最小整数的值;若无解,则输出“NO RESULT”。
样例输入 Copy
10 3 1 3 3 7 2 5 1 2 4 6
样例输出 Copy
3
#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于排序
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
// 找到第k个最小整数的函数
int kth_smallest_integer(int n, int k, int* integers) {
// 对整数数组进行排序
qsort(integers, n, sizeof(int), compare);
// 找到第k个最小整数的值
int count = 1;
int prev = integers[0];
for (int i = 1; i < n; ++i) {
if (integers[i] != prev) {
count++;
if (count == k) {
return integers[i];
}
prev = integers[i];
}
}
// 若无解,则返回0
return 0;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
// 动态分配内存来存储整数数组
int* integers = (int*)malloc(n * sizeof(int));
if (integers == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
// 读取整数数组
for (int i = 0; i < n; ++i) {
scanf("%d", &integers[i]);
}
// 找到第k个最小整数并输出结果
int result = kth_smallest_integer(n, k, integers);
if (result != 0) {
printf("%d\n", result);
}
else {
printf("NO RESULT\n");
}
// 释放动态分配的内存
free(integers);
return 0;
}