寻找最大数
时间限制:
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题改编 上传者
tips:从n个数中剔除m个数相当于,从m个数中按顺序找到最大的n-m个数。
在找第z个最大数字的时候,末尾预留出n-m-z个数字(保证足够的位数)
#include<iostream> #include<cstring> #include<string> using namespace std; int n,m; string s; string ans; void solve() { int index=-1; //从n个数字中挑选出n-m个最大的 for(int z=1;z<=s.size()-m;z++) { //[i,n-(n-m-z)-1]--[n-(n-m-z),n) int maxx=-1; for(int i=index+1;i<m+z;i++) { if(s[i]-'0'>maxx) { maxx=s[i]-'0'; index=i; } } ans.push_back(s[index]); } } int main() { int k;cin>>k; while(k--) { ans.clear(); cin>>s>>m; solve(); cout<<ans<<endl; } return 0; }
-
第一行输入一个正整数T,表示有T组测试数据