码迷,mamicode.com
首页 > 其他好文 > 详细

寻找最大数

时间:2016-05-06 12:53:37      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

寻找最大数

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

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

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

 

输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
2
92081346718538 10
1008908 5
样例输出
9888
98
来源
第六届itat复赛B卷2题改编
上传者

ACM_赵铭浩




/*贪心:
先算出字符数组的长度,减去要删去的位数,得到剩余的位数
第一步查找先从str[0]-str[len-m]之间找出最大值,记下temp=i的位置,并且把最大值存到数组中
第二步从temp+1的位置开始查找,在str[temp+1]-str[len-m+1]之间找出最大值,直至len-m==0为止*/
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char str[101],num[101],max;
    int i,j,t,m,len,k,f,mark,temp;
    cin>>t;
    while(t--)
    {
        f=0;
        cin>>str>>m;
        len=strlen(str);
        m=len-m;
        mark=0;
        temp=0;
        max='0';
        do
        {
            for(i=len-m;i>=mark;i--)
            {
                if(str[i]>=max)
                {
                    max=str[i];
                    temp=i;
                }
            }
            num[f++]=max;
            mark=temp+1;
            max='0';
        }while(--m);
        for(i=0;i<f;i++)
            cout<<num[i];
        cout<<endl;
    }
    return 0;
}


寻找最大数

标签:

原文地址:http://blog.csdn.net/lwd2621/article/details/51329257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!