三色旗
来源:互联网 发布:怎么把不安全网络 编辑:程序博客网 时间:2024/04/20 21:50
题目:
假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您
希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,一次只能调换两个旗子。思路:
将旗子摆成一列,依次遍历
若是蓝色旗子则不动,进行下一次遍历
若是红色旗子则遍历后面的旗子,找到最靠后的一个蓝色旗子,交换
若最后面没有蓝色旗子,则找最靠后的白色旗子,交换
若是白色旗子则遍历后面的旗子,找到最靠后的一个蓝色旗子,交换
在写程序的时候,没有考虑是否交换次数最少,只是交换的时候尽量与最后面的交换,这样就避免了每一次的无用功
代码如下:
写完之后,不太确定是否交换次数最少,于是将答案上的运行后,发现自己的交换次数比答案的少,还疑惑了半天
答案的思路是:
如果W所在的位置为白色,则W+1,表示未处理的部份移至至白色群组。
如果W部份为蓝色,则B与W的元素对调,而B与W必须各+1,表示两个群组都多了一个元素。
如果W所在的位置是红色,则将W与R交换,但R要减1,表示未处理的部份减1。
注意B、W、R并不是三色旗的个数,它们只是一个移动的指标;什幺时候移动结束呢?
一开始时未处理的R指标会是等于旗子的总数,当R的索引数减至少于W的索引数时,表示接下来的旗子就都是红色了,此时就可以结束移动
看懂答案的之后,想看看网上有没有更好的解法,或者说有没有人和思路和我的一样,
于是发现网上的基本都是和答案一样的,才感叹到老师说的天下程序一般抄。
Ps:网上貌似还有个算法思路是:只需将红旗和蓝旗交换,白旗自然到位
0 0
- 三色旗
- 三色旗
- 三色旗
- 三色旗
- 三色旗
- 三色旗
- 三色旗问题
- 三色旗问题
- 趣味算法-三色旗
- 三色旗问题
- 三色旗排序问题
- 三色旗排序问题
- 三色旗问题
- 三色旗算法
- 三色旗算法实现
- 三色旗问题
- 三色旗问题
- 三色旗问题
- android基础之css
- Android 和 iOS 各有千秋
- 好老师 (湖南省第九届大学生计算机程序设计竞赛)
- 二叉树的生成与遍历
- Segmentation fault到底是何方妖孽
- 三色旗
- TCP/IP、Http、Socket的区别
- 如何在android上实现IPhone的按钮滑动效果
- IDS(入侵检测系统)
- 成佩涛-浙江旅游职业学院—列目录漏洞
- Codeforces 327A-Flipping Game(暴力枚举)
- ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)、chr(..
- 加载图像
- TRIZ系列-创新原理-6-多用性原理