寻找最大数
时间限制: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_赵铭浩
- 题意:求一列数字中去除N个数后(不改变数的顺序),数值最大的串。
-
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 char str[110]; 6 int main() 7 { 8 int t, n; 9 scanf("%d", &t); 10 while(t--) 11 { 12 int i, m, len, head = 0; 13 scanf("%s %d", str, &n); 14 len = strlen(str); m = len - n; 15 while(m--) //取len - n位数, 16 { 17 char max = '*'; int temp; 18 for(i = head; i<=n; i++) //取出最大的最高位上的数; 19 { 20 if(str[i] > max) 21 { 22 temp = i; 23 max = str[i]; 24 } 25 } 26 n++; head++; printf("%c", str[temp]); 27 for(i=0; i<=temp; i++) //最高位前清零; 28 str[i]='*'; 29 } 30 printf(" "); 31 32 } 33 return 0; 34 }