nyoj 448 寻找最大数

来源:互联网 发布:移动直播app 开源 源码 编辑:程序博客网 时间:2024/06/05 19:29

寻找最大数

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

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

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

 

输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
样例输入
292081346718538 101008908 5
样例输出
988898
好难受,因为马虎错了好几次。本题思路就是!依次!寻找l-m个最大值,当然找第一个时千万要记着从第0项到第l-m项(举个数自己好好想,想明白就会了),找到第一个最大值s[i]输出之后,接下来只需从i+1开始(题目要求按次序)找下一个最大值(和找第一个一样,记着不是简单的找到最后一项),找够l-m即可。
#include<stdio.h>#include<string.h>int main(){    int n,m;    int i,j,l;    int weishu;    int k,t;    char s[110],max;    scanf("%d",&n);    while(n--)    {        scanf("%s %d",&s,&m);        l=strlen(s);        weishu=l-m;        k=t=0;        for(j=weishu;j>=1;j--)        {            t=k;            for(i=k,max=s[i];i<=l-j;i++)            {                if(s[i]>max)                {                    max=s[i];                    t=i;                }            }            k=t+1;            printf("%c",max);        }        printf("\n");    }    return 0;} 

0 0
原创粉丝点击