输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。寻找一种方案,使得剩下的数字组成的新数最小
样例输入 n=178543 s=4
样例输出 13
思路
贪心
由于剩余的位数固定,要使得最后选出的数最小,优先使高位的数较小,从左向右遍历字符串,使每个数尽可能的小
每次遍历的区间[a,b]
,其中a
是上次选的数的位置,b
是总位数-剩余要选的数的个数,为了保证能选出应有的数量
代码
#include <iostream>
using namespace std;
int main()
{
int s;
string n;
cin >> n >> s;
int m = n.size();
string ans;
int cnt = m - s;
for (int i = 0, j = 0; i < cnt; i ++ )
{
int pos, min_num = 10;
for (; j <= m - (cnt - i); j ++ )
{
if (n[j] - '0' < min_num)
{
min_num = n[j] - '0';
pos = j;
}
}
j = pos + 1;
ans += '0' + min_num;
}
cout << (ans == "" ? "0" : ans);
return 0;
}