1.题目描述
现有n个正整数,要求出这 n 个正整数中的第k个最小整数(相同大小的整数只计算一次)。
输入格式
第一行为 n 和 k; 第二行开始为 n 个正整数的值,整数间用空格隔开。
2.输出格式
第k个最小整数的值;若无解,则输出NO RESULT。
3.输入输出样例
输入1:
10 3
1 3 3 7 2 5 1 2 4 6
输出1:
3
4.说明/提示
n< 10000,k< 1000,正整数均小于 30000.
5.代码:
#include <stdio.h>
#include <stdlib.h>
void bubble_sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
int *numbers = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 对数组进行冒泡排序
bubble_sort(numbers, n);
// 使用一个数组来存储唯一值
int *unique_numbers = (int *)malloc(n * sizeof(int));
int unique_count = 0;
// 去重
for (int i = 0; i < n; i++) {
if (i == 0 || numbers[i] != numbers[i - 1]) {
unique_numbers[unique_count++] = numbers[i];
}
}
// 检查是否存在第 k 个最小的唯一整数
if (k <= unique_count) {
printf("%d\n", unique_numbers[k - 1]);
} else {
printf("NO RESULT\n");
}
// 释放内存
free(numbers);
free(unique_numbers);
return 0;
}