删数问题
题目描述
键盘输入一个高精度的正整数 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代码
cpp
#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;
}