题目描述
输入一个高精度的正整数n(≤240位),去掉其中任意s个数字后,剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。
输入
第1行:一个正整数n;
第2行:s(s<n的位数).
输出
最后剩下的最小数。
思路:跟据贪心,只需要从前往后查找并删除s个前一位比后一位大的数(若都符合条件则删除最后一位)。这里熟练运用string函数会很方便
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<map>
#include<cstring>
#include<string>
#include<set>
#include<queue>
#include<stack>
#define ll long long
using namespace std;
string n;
int s;
int main(){
while(cin>>n>>s){
while(s--){
int i;
for( i=0;i<n.size()-1&&n[i]<=n[i+1];i++);//查找要删除元素的位置
n.erase(i,1);
}
int i=0;
while(n[i]=='0'){//排除前导零
i++;
}
cout<<n.substr(i)<<endl;//从第i位开始输出
}
return 0;
}