寻找最大数
- 描述
-
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
- 输入
- 第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) - 输出
- 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
- 样例输入
-
2 92081346718538 10 1008908 5
- 样例输出
-
9888 98
本题题意是从n中删除m个数,使删除后的数保持最大,本题在输入n时直接定义n为字符串,len为n的长度
则删除m个数后,剩余的数为len-m,设first = 0,second = m,
故从first到second中取一个最大的数,其first = 最大数的索引+1,second++
再从first 到second中取最大数,直到取完为止,即为答案#include <iostream> #include <string> #include <vector> #include <iterator> #include <algorithm> using namespace std; int main(){ int T; cin >>T; for(int icase = 0 ; icase < T; icase++){ string n; int m; cin >>n >>m; vector<char> data(n.begin(),n.end()); string res = ""; int len = n.length(), first = 0 , second = m+1; for(int i = 0 ; i < len-m; ++i){ vector<char>::iterator iter=max_element(data.begin()+first,data.begin()+second); res+=*iter; first = distance(data.begin(),iter)+1; second++; } cout<<res<<endl; } }