⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数中的最大数.cpp

📁 五种排序算法
💻 CPP
字号:
#include <iostream>
#include <cstring> 
using namespace std;
const int N=1000*1000*10 +1;
char buf[N],ans;
int main()
{
    int k;
    while(scanf(" %s%d", buf, &k)!=EOF)
    {
        int len=strlen(buf),rem=len-k,lb=0,ub=0,cnt=1;
        if(rem<=0)
        {
            puts("0");
            continue;
        }
        else if(rem==len)
        {
            puts(buf);
            continue;
        }
        //结果中的第一位必然在buf[k]之前, 因为只能删除k位,
        //所以0~k位中必有一位保留下来了.显然我们要保留
        //0~k位中最小的那位
        ans=buf[0];
        for(int j=1; j<=k; j++)
        {
            if(('0'!=buf[j]||rem==1)&&ans>buf[j])
            {
                ans=buf[j];
                lb=j;
            }
        }
        putchar(ans);
        int digit[10]={},i=lb+1;
        ub=k+cnt;
        while(cnt<rem)
        {
            //计算其余各位,
            for(; i<=ub; i++)
            {
                digit[buf[i]-'0']++;
            }
            for(i=0; i<10; i++)
            {
                if(digit[i])
                {
                    putchar('0'+i);
                    break;
                }
            }
            cnt++;
            int j=lb+1;
            for(;buf[j]-'0'!=i;j++)
                digit[buf[j]-'0']--;
            digit[i]--;
            lb=j;
            i=ub+1;
            ub=k+cnt;
        }
        putchar('\n');
    }
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -