备战蓝桥杯--贪心算法刷题整理5

翻硬币(贪心算法)

看了一下网上的题解,感觉挺强,网友的做题思想值得借鉴,这里分享一下网友的链接,同时再分享一下自己的解题方案
链接:https://blog.csdn.net/qq_34594236/article/details/60326782

题目描述:

小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

比如,可能情形是:oo*oooo

如果同时翻转左边的两个硬币,则变为:oooo***oooo

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:
输入格式

两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000
输出格式

一个整数,表示最小操作步数。
思路:
找两个字符串不相同的位置,记录下所有不相同的下标,一对一对的求其下标的差值,最后再累加即可(题目间接告诉我们,不同的位置的个数一定是偶数)
举个例子:在这里插入图片描述

#include"iostream"
using namespace std;
int a[1010];
int main(){
	string s, c;
	cin >> s >> c;
	
	int k = 0;
	// 从第一个字符串的第一个字符开始,与第二个字符的每一个字符一次比较
	// 只要有不同的,记录下标,结束内层循环 
	for(int i = 0;i < s.size();i ++){
		for(int j = i;j < c.size();j ++){
			if(s[i] != c[j]){
				a[k++] = i;
			}
			break;
		}
	} 
	
	int sum = 0; // 记录结果, 最小操作步数 
	
	for(int i = k-1;i > 0;i --){ //倒着一对一对的相减 
		sum += (a[i] - a[i-1]);
		if(i%2 != 0){ // 这里的作用就是为了可以 一对一对的操作 
			i --;
		}
	}
	
	cout << sum;
	return 0;
}

不积跬步无以至千里,不积小流无以成江海
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是刷算法备战蓝桥杯的一些建议和步骤: 1. 熟悉蓝桥杯的考试内容和题型。了解蓝桥杯的考试规则、题目类型和难度分布,可以从蓝桥杯官方网站或者相关的参考资料中获取这些信息。 2. 学习基础知识。蓝桥杯的题目通常涉及到算法和数据结构的基础知识,例如数组、链表、栈、队列、树、图、排序算法、查找算法等。建议先学习这些基础知识,掌握它们的原理和常见的应用场景。 3. 刷题练习。通过刷题来提高算法和编程能力是非常重要的。可以选择一些经典的算法题目进行练习,例如ACM/ICPC、LeetCode、牛客网等平台上的题目。刷题的过程中要注重理解题目的要求,分析问题的解决思路,编写代码实现解决方案,并进行调试和测试。 4. 参加模拟考试。蓝桥杯的模拟考试可以帮助你熟悉考试的流程和题目类型,也可以检验你的学习成果。参加模拟考试后,可以分析自己的得分情况,找出自己的不足之处,并进行针对性的复习和提高。 5. 学习优秀的解题思路和代码。在刷题的过程中,可以学习一些优秀的解题思路和代码,了解不同的解题方法和技巧。可以通过查阅相关的参考书籍、博客、论坛等获取这些信息。 6. 多做实战训练。除了刷题,还可以参加一些实战训练,例如参加ACM/ICPC比赛、编程竞赛等。这些实战训练可以提高你的编程能力和解题速度,也可以锻炼你的团队合作和应对压力的能力。 7. 多与他人交流和讨论。与他人交流和讨论可以帮助你更好地理解和掌握算法和编程知识。可以加入一些算法学习群组、论坛或者参加一些线下的学习活动,与其他学习者一起交流和分享经验。 8. 坚持练习和复习。刷算法题是一个长期的过程,需要坚持不懈地练习和复习。每天保持一定的学习时间,不断积累和提高自己的算法和编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rabbit Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值