使用C语言实现下面贪心算法的题目:有一个长度为n(n <= 240)的正整数,从中取出k(k < n)个数,使剩余的数保持原来的次序不变,求这个正整数经过删数之后最小是多少
时间: 2024-05-14 12:18:22 浏览: 153
以下是使用C语言实现贪心算法的代码:
```c
#include <stdio.h>
int main() {
int n, k;
scanf("%d%d", &n, &k);
int nums[n], min_nums[k];
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
int min_index = 0;
for (int i = 0; i < k; i++) {
min_nums[i] = nums[min_index];
for (int j = min_index + 1; j < n - (k - i - 1); j++) {
if (nums[j] < min_nums[i]) {
min_nums[i] = nums[j];
min_index = j;
}
}
min_index++;
}
int result = 0;
int j = 0;
for (int i = 0; i < n; i++) {
if (j < k && nums[i] == min_nums[j]) {
j++;
} else {
result = result * 10 + nums[i];
}
}
printf("%d\n", result);
return 0;
}
```
该算法的思路是首先找到最小的k个数,然后在原数列中删除这些数,得到一个新的数列,该数列经过删数之后就是题目所求的最小正整数。在找到最小的k个数的过程中,需要注意保持原数列中剩余数的次序不变。
阅读全文