??個人主頁:個人主頁
??系列專欄:C語言試題200例
??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站
?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家
1、題目
題目:有一根繩子,上面有紅、白、藍三種顏色的旗子。繩子上旗子的顏色并沒有順序,現在要對旗子進行分類,按照藍色、白色、紅色的順序排列。只能在繩子上進行移動,并且一次只能調換兩面旗子,怎樣移動才能使旗子移動的次數最少?:
分析:
旗子在繩子上移動,而且一次只能調換兩面旗子,因此只要保證在移動旗子時,從繩子的開頭開始,遇到藍色旗子向前移動,遇到白色旗子則留在中間,而遇到紅色的旗子則向后移動。要使移動次數最少,可以使用三個指針 b、w、r 分別作為藍旗、白旗和紅旗的指針。
若 w 指針指向的當前旗子為白色,則 w 指針增加 1,表示白旗部分增加一面。若 w 指針指向的當前旗子為藍色,則將 b 指針與 w 指針所指向的旗子交換,同時 b 指針與 w 指針都增加 1,表示藍旗和白旗部分都多了一個元素。若 w 指針指向的