用C语言写【贪心法】输入任意位数的整数num,指定删除任意n位数。 当去除n位后,这个数字序列所能组成的最小数字是多少?注意:数字保持原有序列,不能更改顺序。 示例: 输入: num:178453 n:4 结果:13 输入: num:156263 n:4 结果:12
时间: 2024-05-01 18:17:38 浏览: 91
贪心算法的例子——删除数字问题
5星 · 资源好评率100%
你好!我可以帮你回答问题,针对你提出的问题,以下是一个C语言的贪心算法代码实现:
```c
#include<stdio.h>
#include<string.h>
void del_num(char str[], int n){
int len = strlen(str);
if (len <= n){ // 位数不足要删除的位数
str[0] = '0';
str[1] = '\0';
return;
}
int i, j;
for (i = 0; i < n; i++){ // 按照要删除的位数循环
for (j = 0; j < len - 1; j++){ // 从高到底扫描,寻找一个位置,使得它右边数字比它小
if (str[j] > str[j + 1]) break;
}
// 将它后面的数字往前移,并将要删除的数字位置上的数字替换为 '0'
for (int k = j; k < len - 1; k++){
str[k] = str[k + 1];
}
str[len - 1] = '\0';
len--; // 字符串长度减1
}
}
int main(){
char num[10001]; // 定义字符数组,用于存储输入的数字
int n;
printf("请输入一个任意位数的正整数num:\n");
scanf("%s", num);
printf("您要去除多少位数字呢?\n");
scanf("%d", &n);
del_num(num, n); // 删除指定位数的数字
printf("去除%d个数字后,数字序列能组成最小数字为:%d\n", n, atoi(num)); // 将字符数组转换成数字输出
return 0;
}
```
你可以将上述代码复制到C语言编译器中编译运行,测试一下是否能够得到正确的结果。当然,如果你对代码有任何疑问,也可以随时向我提出,我会尽力为你解答。
阅读全文