版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/82117569
NYOJ-448:寻找最大数
来源:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=448
标签:贪心算法
参考资料:
相似题目:
题目
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
输入
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)
输出
每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
输入样例
2
92081346718538 10
1008908 5
输出样例
9888
98
参考代码
#include<stdio.h>
#include<string.h>
#define MAXN 105
char num[MAXN];
char ans[MAXN];
int main(){
int T;
scanf("%d",&T);
while(T--){
int m;
scanf("%s%d",num,&m);
int len=strlen(num);
m=len-m;
strncpy(ans,num,m);
for(int i=m;i<len;i++){
ans[m]=num[i];
int flag=0;
int j=0;
while(j<m){
if(flag==1){
ans[j]=ans[j+1];
j++;
continue;
}
if(ans[j]<ans[j+1]){
flag=1;
}
}
}
ans[m]='\0';
printf("%s\n",ans);
}
}