您的位置:首页 > 其它

XYNUOJ 2042: 寻找最大数

2018-03-19 21:45 169 查看

2042: 寻找最大数

时间限制: 1 Sec  内存限制: 64 MB
[提交][状态][讨论版]

题目描述

请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,比如当n=92081346718538,m=10时,则新的最大数是9888 

输入

第一行输入一个正整数T,表示有T组测试数据 每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)

输出

每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数

样例输入

2
92081346718538 10
1008908 5

样例输出

9888
98
解题思路:该题是贪心,若要删去n个数,求最大。
如 1008908  5 
该数值的长度 len 为 7,删5个数,则就是选2个数,那么前 6 个数中一定有符合第一个的数,找其中最大的数为 9,从 9 开始(也就是第5个数) 
现在提供几组测试数据
1000000800009 11   89
1000000800000 11   80
代码如下:# include<stdio.h>
# include<string.h>
int main(){
int t;
scanf("%d",&t);
while(t--)
{
char a[105];
int m;
scanf("%s %d",a,&m);
int n=strlen(a);
int k=n-m; //k 代表选几个数
int c1=0;
while(k--)
{ int c2; //不能对其赋值
char c='0';
for(int i=c1;i<n-k;i++)
{
if(a[i]>c) //寻找最大的一个
{
c=a[i];
c2=i;
}
}
printf("%c",c);
c1=c2+1;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: