前两天写了一道也是寻找最大数,思想基本一样,都是不断贪心求当前操作的最大值。
这道题意:给一个数n,这个n很大,从该数的各个位中找到m个数字删除,剩下的按原来的顺序排列,所得到的数字最大为多少?
可以用字符串存储,计算该串的长度,然后在m的位置开始往后到len-1,在st到i中找到最大值放入另外的一个字符数组中,如此循环,直到找出len-m个最大数。
#include<stdio.h>
#include<string.h>
int main()
{
int t,m;
scanf("%d",&t);
while(t--)
{
char s[150],ss[150];
getchar();
scanf("%s%d",s,&m);
int st=0,now=m,k=0,len;
len=strlen(s);
for(int i=m;i<=len-1;i++) //从m到字符串最后一位
{
char Max=0; //初始化Max
for(int j=st;j<=i;j++) //找出st到i这段区间的最大值
{
if(s[j]>Max)
{
now=j; //记录最大数位置
Max=s[j];
}
}
ss[k++]=Max; //放入另外数组中
st=now+1; //更新st
}
ss[k]='\0'; //转换成字符串
printf("%s\n",ss);
}
return 0;
}