删数问题
题目描述
键盘输入一个高精度的正整数 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
思路
将 n 作为字符串读入,并在 n 末尾添加一个 0 ,方便比较。
如果当前数字大于等于下一个数字,则删除当前数字。
注意:结果要移除前导零再输出。
AC代码
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;int main()
{string n;int k;cin >> n >> k;n += '0';while (k){for (int i = 0; i < n.length() - 1; i++){if (n[i] > n[i + 1]){string a = n.substr(0, i);string b = n.substr(i + 1, n.length() - i - 1);// cout << a << " " << b << endl;n = a + b;k--;break;}}}int index = n.find_first_not_of('0');// cout << index << endl;if (!~index){index = 0;}n = n.substr(index, n.length() - index - 1);cout << n << endl;return 0;
}