1.思路
寻找最高峰,即单调递增子列中的最后一项。(纸上自己演算便可发现)
此思路避免了既要删除较大的数,又要使其尽量靠前的繁琐条件。
2.代码
#include<iostream>
using namespace std;
int main()
{
string n;
int k;
int i=0;
cin>>n;
cin>>k;
while (k>0)
{
for (i=0;n[i]<=n[i+1];) //一定要用for循环,不能用while,因为要让i每次都从0
i++; 开始,即每次寻找最高峰都是从头开始,若用while则是
n.erase(i,1); 从上一次最高峰的下一项开始,忽略了前面的数。
k-=1;
}
while (n[0]=='0' && n.size()>1) //去除前导0,防止删除后出现0123这种,最前面多了个0
n.erase(0,1);
cout<<n;
return 0;
}
#涉及到的一个string函数:
erase(i,n):从i开始(包含i),往后n项,删除。
erase(i):从i开始(包含i),后面全部删除。