您的位置:首页 > 其它

NYOJ_448 寻找最大数

2016-07-28 15:33 239 查看
描述
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,

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

 

输入第一行输入一个正整数T,表示有T组测试数据

每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)输出每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数样例输入
2
92081346718538 10
1008908 5

样例输出
9888
98


解题思路:

从最高位向下扫描,保持序列的递减性,若违反递减性,就将该数删除。 eg: 9878   删除7  得到 988

若整个序列都是递减的,就直接删除最后一个数。

代码:

#include<cstdlib>

#include<string.h>

#include<iostream>

#include<cmath>

#include<cstring>

#include<algorithm>

#include<iomanip>

#include<ctime>

#include<cstdio>

#include<stack>

#include<map>

#include<queue>

#include<vector>

#include<cctype>

using namespace std;

int main()

{

    char ss[200];

    int nn;

    int tt;

    cin>>tt;

    while(tt--)

    {

        scanf("%s%d",ss,&nn);

        int len=strlen(ss);    

        while(nn--)

        {

            int i;

            for(i=1;i<len;i++)

            {

                if(ss[i]>ss[i-1])

                {

                    break;

                }

            }

            if(i<len)

            {

                for(int j=i-1;j<len-1;j++)

                {

                    ss[j]=ss[j+1];                    

                }

            }            

            ss[len-1]='\0';

            len--;            

        }

        for(int i=0;i<len;i++)

        {

            cout<<ss[i];

        }

        cout<<endl;        

    }    

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: