题目描述
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
输入描述:
输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。
输出描述:
输出保留下来的结果。
示例1
输入
325 1
输出
35
思路
这道题的思路主要是循环遍历,遇到前面的数比后面的数小的话则删除前面的数,如果删除的数不够则从后面开始删除,直到满足删除的个数为止
#include <bits/stdc++.h>
using namespace std;
const int maxx= 5e4+20;
char str[maxx], st[maxx];
int main(){
int in;
cin>>str>>in;
int top= 0;
int num= 0;
int len= strlen(str);
for(int i= 0; i< len; i++){
while(top> 0&& st[top- 1]< str[i]&&num< in){
//直到在前面找到一个比他大的数才停止
//top> 0是为了保证top的值一直是正的防止越界
num++;
top--;
}
st[top++]= str[i];//找到后添加在新的字符串后面
}
top= min(top, len- in);//防止删除的数目小于in
st[top]= '\0';
cout<<st<<endl;
return 0;
}