坦然玲子  

 

寻找最大数

时间限制: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
分析:第一位尽可能是最大的,结果才可能最大,确定第一位后,第二位也是如此,以此类推;
需要注意的是,每一位寻找最大数的范围是不一样的
 1 #include<cstdio>
 2 #include<cstring>
 3 
 4 int main()
 5 {
 6  int t,n,i,j,str,k;
 7  char s[103],max;
 8  
 9  scanf("%d",&t);
10  while(t--)
11  {
12   scanf("%s%d",s,&n);
13   str=strlen(s);
14   max='0';
15   for(i=str-n,k=0; i>0; i--)
16   {
17      for(j=k;j<=str-i;j++)
18    if(s[j]>max)
19    {
20     max=s[j];
21     k=j+1;
22    }
23     printf("%c",max);
24    max='0';
25   }
26   printf("\n");
27 
28  }
29 return 0;
30 }

 

posted on 2012-03-12 17:17  坦然玲子  阅读(361)  评论(0编辑  收藏  举报