寻找最大数

题目描述

请在整数 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 <stdio.h>
 2 #include <iostream>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 typedef pair<int,int> Group;
 7 Group group[105],copy_group[105];
 8 
 9 int main(void){
10     int n;
11     scanf("%d",&n);
12 
13     while(n--){
14         getchar();
15         int i = 0;
16         int m;
17         char t;
18         do{
19             t = getchar();
20             if(t == ' ')
21                 break;
22             group[i].first = (int)(t - 48);
23             group[i].second = i;
24             i++;
25         }while(1);
26         sort(group,group + i + 1);
27 
28         scanf("%d",&m);
29         for(int j = m + 1; j < i + 1; j++){
30             copy_group[j - m - 1].first = group[j].second;
31             copy_group[j - m - 1].second = group[j].first;
32         }
33         sort(copy_group,copy_group + i - m);
34 
35         for(int k = 0; k < i - m; k++)
36             printf("%d",copy_group[k].second);
37         printf("
");
38     }
39     return 0;
40 }
 
 
原文地址:https://www.cnblogs.com/yfs123456/p/5423926.html