题目链接

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

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 5e4+5;
char str[maxn];
int vis[maxn]; 
int main()
{
    int n;                    //删去n个数
    memset(vis,0,sizeof(vis)); 
    scanf("%s%d",str+1,&n);
    int z=strlen(str+1)-n;    //保留z个数 
    int bac=0; 
    for(int i=1;i<=z;i++)    //从左往右确定第i个数 
    {
        int maxv=-1,maxpos; 
        for(int j=bac+1;j<=n+i;++j)            //确定搜索区间,主要是上下限 
        {
            if(vis[j]) continue;
            if(str[j]-'0'>maxv)
            {
                maxv=str[j]-'0';
                maxpos=j;
            }
        }
        vis[maxpos]=1;    
        bac=maxpos;
    }
    for(int i=1;i<=strlen(str+1);i++)
    {
        if(vis[i]) cout<<str[i];
    }
    cout<<endl;
    return 0;
}
Last modification:September 21st, 2019 at 12:44 am
如果觉得我的文章对你有用,请随意赞赏