题解:P1106 删数问题
sol
很显然贪心,考虑每次删字符串中最大的那个数,删够 \(k\) 次后结束循环,然后去除前导零就可以了,根据小学数学可以证明,这里就不再阐述了,由读者自行证明。
:::info[code]{open}
#include<bits/stdc++.h>
using namespace std;
int main(){
int k;
string s;
cin>>s>>k;
for(int i=1;i<=k;i++){
int t=-1;
for(int j=0;j<=s.size()-1;j++){//找最大值所在的位置
if(s[j]>s[j+1]){
t=j;
break;
}
}
if(t== -1){//删除
s.erase(s.size()-1);
}else{
s.erase(t,1);
}
}
int f=0;
if(s=="0"){//特判,如果是0那就直接输出0,如果不判断那么将不会输出
cout<<0;
return 0;
}
for(int i=0;i<=s.size()-1;i++){//去除前导零
if(s[i]!='0'){
f++;
}
if(f){
cout<<s[i];
}
}
}

浙公网安备 33010602011771号