您的位置:首页 > 其它

NYOJ448寻找最大数(贪心)

2016-01-06 20:15 239 查看


寻找最大数

时间限制: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

题目大意:给你一列数,若从中删除m个数,求不改变原有顺序的情况下使最终得到的数最大;

解题思路:这题需要用到贪心的思想,即局部最优求整体最优。假如这列数有n个数,那么最终的数字肯定是n-m位;

首先,从1-m+1位开始找出最大数字,这一定是最终得到的数的第一位,记录下这个数的位置i,那么第二位肯定是从i+1开始到m+1,找一个最大的数,这是第二位,

依次类推,直到找完n-m个数。

AC代码:

#include<stdio.h>
#include<string.h>
int main()
{
int len,i,j,k,m;
char s[110],c;
scanf("%d",&k);
while(k--)
{
getchar();
scanf("%s %d",s,&m);
len=strlen(s);
i=0,j=0;
while(m<len)
{
c=s[j];
for(i=j;i<=m;i++)
{
if(c<s[i])
{
c=s[i];
j=i;
}
}
printf("%c",c);
j++;
m++;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: