nyoj 448 寻找最大数

来源:互联网 发布:彩票pk10开奖网源码 编辑:程序博客网 时间:2024/06/07 04:43

寻找最大数

时间限制:1000 ms  | 内存限制:65535 KB

难度:2

描述

请在整数 n中删除m个数字,使得余下的数字按原次序组成的新数最大,

比如当n=92081346718538m=10时,则新的最大数是9888

 

输入

第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,mn可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0m小于整数n的位数)

输出

每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数


样例输入

2

92081346718538 10

1008908 5

样例输出

9888

98


核心思想:比如  92081346718538   这个数,去掉十个数之后,按原来的次序组成最大数,那么开始计算,一共14位数,如果去掉十位数,剩四位数,要想这四位数最大,那么逐次查找,使得首位最大才是结果最大的前提:一:从前11位开始查找,找到一位最大数,对这个位置做个标记flag;二,从flag到第12位数,找到最大值,再做标记flag,依次循环,,,,,,直到找到最后结果为止


#include<stdio.h>
#include<string.h>
#define M 101
char a[M],b[M];
int i,j,n,m,flag;
int main()
{
    int k;
    scanf("%d",&k);    
    while(k--)
    {
        j=0;flag=0;
        memset(a,0,sizeof(a));
        scanf("%s %d",a,&m);
        n=strlen(a);
        for(int w=m;w<n;w++)
        {
            char max=a[flag];
            for(i=flag;i<=w;i++)
            {
                if(max<a[i])
                {
                    max=a[i];
                    flag=i;
                }
            }
            b[j++]=max;
            a[flag]='0';
        }
        puts(b);
    }
    return 0;
}


一天进步一点点,加油!!!

0 0