保留最大的数

题目描述
给定一个十进制的正整数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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值