使用C语言完成下面问题键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。 编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。 输入格式: 输入两个数字,分别为原始数n,要去掉的数字数s (s < n); 输出格式: 输出去掉s个数后最小的数。 输入样例: 178543 4 输出样例: 13
时间: 2024-02-23 11:58:07 浏览: 159
以下是使用 C 语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 105
char n[MAX_N]; // 存储原始数
int s; // 要去掉的数字个数
int len; // 原始数的长度
char res[MAX_N]; // 存储结果
// 递归寻找最小值
void dfs(int pos, int cnt, char* cur) {
// 如果去掉 s 个数字,返回
if (cnt == s) {
// 如果当前结果比之前的结果更小,更新结果
if (strcmp(cur, res) < 0) {
strcpy(res, cur);
}
return;
}
// 如果已经遍历到原始数的最后一位,返回
if (pos == len) {
return;
}
// 选取当前位
cur[cnt] = n[pos];
dfs(pos + 1, cnt + 1, cur);
// 不选取当前位
dfs(pos + 1, cnt, cur);
}
int main() {
// 读入原始数和要去掉的数字个数
scanf("%s%d", n, &s);
// 计算原始数的长度
len = strlen(n);
// 初始化结果数组
memset(res, '9', sizeof(res));
// 开始递归寻找最小值
dfs(0, 0, n);
// 输出结果
printf("%s\n", res);
return 0;
}
```
阅读全文