寻找最大数
时间限制: 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
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) #define maxn 1000005 #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; int main() { int t; scanf("%d",&t); while(t--) { char a[101],b[101]; int k; getchar(); scanf("%s%d",a+1,&k); int l=strlen(a+1); int flag=0; int p=0; int ans=l-k; while(k!=l) { int maxx=-1; for(int j=flag+1;j<=k+1&&j<=l;j++)//在可选取的范围内找到最大值 { if((a[j]-'0')>maxx) { maxx=a[j]-'0'; flag=j; } } b[p++]=a[flag];//找到并存到一个新数组中 k++; } for(int i=0;i<p;i++) { printf("%c",b[i]);//输出找到的最大值输出即可 } printf("\n"); } }