保留最大的数

题目描述

给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。

输入描述:

输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。

输出描述:

输出保留下来的结果。

示例1

输入

复制

325 1

输出

复制

35

 

需要cnt次从前到后的遍历,如果遇到前一位的数字小于后一位的数字时,就可以将前一位数字删除掉,这里用到了erase函数。

注意如果到最后这个数列已经是从大到小的了,并且去掉的数字个数还不够cnt个时,就要将最后面的几个数字去掉了,去掉的个数是cnt-已经去掉的数字个数。

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdio> 
#include<string>
using namespace std;
int main(){
	string number,s1,s2;
	int cnt;
	cin>>number>>cnt;
	int size_n=number.size();
	while(cnt){
		int flag=0;   //用于标记整个数列是否已经是从大到小的了 
		for(int i=1;i<size_n;i++)
		   if(number[i]>number[i-1]){
			number.erase(i-1,1);
			cnt--; 
			flag=1;
			break; 
		   }
		if(flag) continue;   
		size_n=number.size(); 
		number.erase(size_n-cnt,cnt);    
		cnt=0;
	}
	cout<<number<<endl;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值