【SSL1457】翻幣問題

題面:

\[\Large\text{翻幣問題}\]
\[Time~Limit:1000MS~~Memory~Limit:65536K\]編程

Description

有N個硬幣(6<=N<=20000)所有正面朝上排成一排,每次將其中5個硬幣翻過來放在原位置,直到最後所有硬幣翻成反面朝上爲止。試編程找出步數最少的翻法,輸出最少步數及翻法。spa

Input

從鍵盤輸入一個正整數N(6<=N<=20000),表示硬幣的數量。3d

Output

第1行:一個整數,表示最少步數
第2行至最後一行:先是一個整數,表示步驟序號(從0開始編號),後接一個":",再接當前硬幣的狀態(用一個整數表示正面朝上的硬幣的個數)code

Sample Input

6  (開始:6個硬幣正面朝上)

Sample Output

0:6   (第0步結果:6個硬幣正面朝上)
1:1   (第1步結果:1個硬幣正面朝上)
2:4   (第2步結果:4個硬幣正面朝上)
3:3   (第3步結果:3個硬幣正面朝上)
4:2   (第4步結果:2個硬幣正面朝上)
5:5   (第5步結果:5個硬幣正面朝上)
6:0   (第6步結果:0個硬幣正面朝上)
6     (最少用6步實現所有反面朝上)

正文:

  1. 判重是必須的blog

  2. 假設當前狀態是正面的個數,那麼便有\(6\)種變化:
    正面個數是\(x\in \{5,4,3,2,1,0\}個\)
    變化後都是\(5-x\)ip

  3. 還有個條件,由於只能翻\(5\)個,因此正面的個數和反面的個數要大於其對應的翻轉數input

  4. 綜上所述,您能it

相關文章
相關標籤/搜索