键盘输入一个高精度的正整数n,去掉其中任意s个 19数字后剩下的数字按原左右次序将组成一个新的正整数。 编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。用C语言编写
时间: 2023-08-20 16:19:26 浏览: 146
C语言 从键盘上输入的一组正整数(以输入0为结束),统计并计算出最小值数字的数 量在这组数字中的占比,显示最终结果
以下是C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 1000
int n, s;
char num[MAX_N + 1];
char ans[MAX_N + 1];
void find(int x, int y)
{
int i, j, k = 0;
for (i = y; i < n; i++) {
if (num[i] == '1') {
for (j = i + 1; j < n; j++) {
if (num[j] == '9') {
if (k + j - i <= s) {
k += j - i;
continue;
}
ans[x++] = '1';
find(x, j + 1);
for (i++; i < j; i++) {
ans[x++] = num[i];
}
return;
}
}
}
ans[x++] = num[i];
}
ans[x] = '\0';
}
int main()
{
scanf("%s %d", num, &s);
n = strlen(num);
find(0, 0);
printf("%s", ans);
return 0;
}
```
输入格式为一个字符串和一个整数,其中字符串表示输入的正整数,整数表示要去掉的19数字的个数。输出去掉19数字后组成的最小正整数。
算法思路:
首先,我们可以从左到右遍历输入的正整数,如果当前位是1,则在其右侧找到第一个9,如果它们之间的差小于等于s,则可以将它们一起去掉。否则,我们应该保留1,去掉9之前的所有数字,并递归考虑后面的数字。这样就可以找到最小的正整数了。
该算法的时间复杂度为O(n^2),其中n是输入的正整数的位数。
阅读全文