本题可以使用贪心,每次从头开始找山峰(即a[i]>a[i+1]),并删除a[i],即将i+1及之后的字符往前移一位,如果没有“山峰”,则直接删除最后一位。
注意:本题看样例的话很容易想到:每次只需删除数中最大的一个数字,然而这是错误的贪心策略,故应转换思路。
具体代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
string str;
int k;
cin>>str;
scanf("%d",&k);
int lens=str.size();
while(k--){
for(int i=0;i<=(lens-2);i++){
if(str[i]>str[i+1]){
for(int j=i;j<=(lens-2);j++){
str[j]=str[j+1];
}
break;
}
}
lens--;
}
//输出结果时 注意去掉前导0
int begin=0;
while(str[begin]=='0'&&begin<lens){
begin++;
}
if(begin==lens) cout<<0;
else{
for(int i=begin;i<lens;i++){
cout<<str[i];
}
}
return 0;
}