【蓝桥杯2013C/C++组省赛真题】——翻硬币

题解思路来源于郑未老师。
这一题中,关于状态的改变,有一个思路是广度优先搜索,另外一个思路是找规律(但是我没想到)。
思路一:广度优先搜索
广度优先搜索的方法是运用队列,首先把初始的串放进队列中,然后相继把初始串变化一次的串(从头到尾)放进队列,但是要注意重复的串就不用放进队列了。然后每弹出一个元素(串),就与最终串进行比较,如果发现与最终串一致,则结束。如果不一致,则把弹出来的那个串从头到尾都变化的串加入队列中(指的是从头到尾翻硬币的情况)。为什么可以这样求出最优解呢,因为广度优先搜索是从相邻最近的元素开始放入队列的。
代码如下:
【蓝桥杯2013C/C++组省赛真题】——翻硬币_第1张图片
可是这个方法只能通过示例,不知道为何。
思路二:找规律
发现从第一个不同元素到第二个不同元素之间的距离就是要翻硬币的最佳次数。
代码如下:
【蓝桥杯2013C/C++组省赛真题】——翻硬币_第2张图片

你可能感兴趣的:(笔记)