第十二届河南省赛热身题 A 最强大脑

博主分享省赛体验,提到5月6号热身赛A题“最强大脑”用了贪心算法。思路是把数字当字符串输入,两两比较删除数字,删完k次,若数字递增则从后删k位,操作后删除前导零,特殊情况需控制输出结果为0。

滴,省赛体验卡。
和学长学姐们去现场体验,收获也还是挺多的,这几天可能会慢慢总结一下叭。看题:
A 最强大脑

这道是5月6号的热身赛A题最强大脑~用了简单的贪心算法。可能比赛猛一下看到这道题真的不太好想,我们目前也只知道这一种方法了,思维就比较局限…

思路:把数字当字符串输入,从前往后两两相比较,前面的数如果大于后面的数,则删除前面的数,然后重新对这个新的数再重复两两比较和删除操作,直到删完k次为止(每次只删一个!)。如果这个数字本来就是递增的,从后往前删除k位即可。操作完需要将前导零全部删除。 要注意的是,像1000009这样的数,删除2位后字符串即为空,这时需要控制最后的输出结果为0。

我的蒟蒻代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string x;
	int k,t,flag,flag0;
	cin >> t;
	while(t--)
	{
		cin >> k;
		getchar();
		cin >> x;
		flag = 0;
		for(int i = 0;i < k;i ++)
		{
			for(int j = 0;j < x.length()-1;j++)
			{
				if(x[j] > x[j+1] && flag == 0)
				{
					x.erase(j,1);
					flag = 1;
				}
			}
			if(flag == 0)
			{
				x.erase(x.length()-1,1);
			}
			flag = 0;
		}
		flag0 = 0;
		while(flag0 == 0)
	{
		if(x[0] == '0')
		{
			x.erase(0,1);
		}
		else
		{
			flag0 = 1;
		}
	}
	if(x.length() == 0)
	{
		cout << 0 << endl;
	}
	else
		cout << x << endl;
		
	}
	
	return 0;
}

告辞~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值