nyoj448 寻找最大数

这道题有个最重要的特点,就是要在删除数的情况下,原序输出的数是最大的才可以,一定要记住,是原序

这道题的贪心策略就是在按顺序的情况下一次一次找到该输出的最大数 

举个例子:假如输入数据的长度是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;
}


	

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值