删数问题
题目描述
键盘输入一个高精度的正整数 n n n(不超过 250 250 250 位),去掉其中任意 k k k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 n n n 和 k k k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
输入两行正整数。
第一行输入一个高精度的正整数 n n n。
第二行输入一个正整数 k k k,表示需要删除的数字个数。
输出格式
输出一个整数,最后剩下的最小数。
样例 #1
样例输入 #1
175438
4
样例输出 #1
13
提示
用 len ( n ) \operatorname{len}(n) len(n) 表示 n n n 的位数,保证 1 ≤ k < len ( n ) ≤ 250 1 \leq k < \operatorname{len}(n) \leq 250 1≤k<len(n)≤250。
问题链接: P1106 删数问题
问题分析: 贪心问题,不解释。
参考链接: (略)
题记: (略)
AC的C++语言程序如下:
/* P1106 删数问题 */
#include <iostream>
using namespace std;
int main()
{
string n;
int k;
cin >> n >> k;
while (k) {
int i;
for (i = 0; n[i] <= n[i + 1]; )
i++;
n.erase(i, 1);
k--;
}
while (n[0] == '0' && n.size() > 1)
n.erase(0, 1);
cout << n;
return 0;
}