有一十进制正整数,移除其中的k个数,使剩下的数字是所有可能中最大的。
假设:
字符串的长度一定大于等于k
字符串不会以0开头
输入:
一行由正整数组成的数字字符串,和一个正整数k,俩个数据用空格隔开,
如:1432219 3
输出:
移除k位后可能的最大的数字字符串。
如1432219移除1 ,2,1这三个数字后得到4329,为所有可能中的最大值。
例子:
1432219 3
输出:
4329
代码:
#include
#include <bits/stdc++.h>
#include
using namespace std;
int main()
{
char line[1000001];
// 循环读入多行数据
while (cin.getline(line, 1000000)) {
string str = “”;
char cstr[20];
int k = 0;
sscanf(line, “%s %d”, cstr, &k);
str = cstr;
int pos = 0;
int len = k;
int min = INT_MIN;
int min_pos = pos;
while (true)
{
if (len >= str.length() - pos)
{
str.erase(pos, len);
break;
}
min = INT_MIN;
min_pos = pos;
for (int i = pos; i <= pos + len; i++)
{
if (str[i] - '0' > min)
{
min = str[i] - '0';
min_pos = i;
}
}
len = len - (min_pos - pos);
str.erase(pos, min_pos - pos);
pos++;
}
int cut = 0;
for (int i = 0; i < str.length(); i++)
{
if (str[i] != '0')
{
cut = i;
break;
}
}
str.erase(0, cut);
cout << str << endl;
}
return 0;
}