nyoj 448 寻找最大数

来源:互联网 发布:js字符串加逗号 编辑:程序博客网 时间:2024/06/10 21:56

寻找最大数

时间限制: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
来源

第六届itat复赛B卷2题改编


删除m个数,剩 l-m 个最大数,从高位到低位寻找第i个最大数,下次从当前最大位的下一位开始到i+m位之间寻找最大的数。

<span style="font-family:SimSun;">#include<cstdio>#include<cstring> int main(){char str[110],ans[110];int t,m,l,max,pos,cnt;scanf("%d",&t);while(t--){scanf("%s",str);getchar();scanf("%d",&m);l=strlen(str);pos=0;cnt=0;for(int i=0;i<l-m;i++)//寻找l-m个最大数 {max=-1;for(int j=pos;j<=i+m;j++)//j的范围要准 {if(max<str[j]-'0'){max=str[j]-'0';pos=j;}}ans[cnt++]=max;//记录最大数 pos++;}for(int i=0;i<cnt;i++){printf("%d",ans[i]);}printf("\n");}return 0;}</span>



0 0