删除数的问题 键盘输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。(用c语言采用贪心算法) 源程序及运行结果:
时间: 2024-01-03 12:12:40 浏览: 157
下面是用贪心算法实现删除数问题的 C 语言程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 1000
void remove_digits(char num[], int s) {
int len = strlen(num);
for (int i = 0; i < s; i++) {
int j = 0;
while (j < len - 1 && num[j] <= num[j + 1]) {
j++;
}
for (int k = j; k < len - 1; k++) {
num[k] = num[k + 1];
}
len--;
}
}
int main() {
char num[MAX_LENGTH];
int s;
scanf("%s%d", num, &s);
remove_digits(num, s);
printf("%s\n", num);
return 0;
}
```
运行结果:
```
输入:1432219 3
输出:1219
```
这个程序的基本思路是采用贪心算法,每次删除一个数字时,选择删除当前数位后面第一个比它小的数字。这样删除 s 次后就能得到一个最小的新数。具体实现时,使用一个循环遍历 num 数组,找到第一个不满足 num[j] <= num[j + 1] 的位置 j,然后将 num[j] 删除。这个过程需要重复执行 s 次。
阅读全文