这道题有个最重要的特点,就是要在删除数的情况下,原序输出的数是最大的才可以,一定要记住,是原序
这道题的贪心策略就是在按顺序的情况下一次一次找到该输出的最大数
举个例子:假如输入数据的长度是14位,要删掉的是10位,在保证顺序的情况下,输出4次,每次都按前后顺序输出最大值,即若存储下标为0到13,则在下标为0到10之间的数中选出最大值输出,用max记录最大值对应的下标,接下来在max+1到11之间,找出最大值输出,依此类推,即可
我做这题的时候一开始 没有注意按原顺序 再后来 发现测试数据有点特殊 有的数据特点它没体现出来 接下来放代码 然后再给几组测试数据
测试数据:
3
1008908 5
199609170620 7
19007596 5
98
99976
996
#include <stdio.h>
#include <string.h>
char a[105];
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
int m;
scanf("%s%d",a,&m);
int len=strlen(a);
int i,j,max=0;//max作为标记
for(j=len-m;j>0;j--)//控制循环次数 即找最大数的次数
{
for(i=max+1;i<len-j+1;i++)//控制从哪里到哪里找该次应输出的最大次数
{
if(a[max]<a[i])
{
max=i;
}
}
printf("%c",a[max]);
max=max+1;//此时max的值代表下一次找最大数应开始的位置
}
printf("\n");
}
return 0;
}