翻幣問題 題解

2021-10-01 07:35:00 字數 1051 閱讀 2598

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

從鍵盤輸入乙個正整數n(6<=n<=20000),表示硬幣的數量。

第1行:乙個整數,表示最少步數

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

輸入

6輸出

6樣例解釋

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步實現全部反面朝上)

由題可得知有6種翻法:

原正個數

原負個數

翻後正個數

翻後負個數50

-5+541

-3+332

-1+123

+1-114

+3-305

+5-5

判斷當前狀態是否滿足翻的條件,並且翻後狀態沒有出現過

是就 tail++,放入隊尾,將翻後狀態=1

如果當前狀態正數個數=0,輸出步數

別的就套模板啦,我只是個蒟蒻

#include#includeusing namespace std;

int a[20100],h,t,n;

int fz[7]=,ff[7]=;

struct cs[20100];

int main()

用來檢測程式,可看每步的正數個數

cout

}while (hreturn 0;

}

翻幣問題 BFS

有n個硬幣 6 n 20000 全部正面朝上排成一排,每次將其中5個硬幣翻過來放在原位置,直到最後全部硬幣翻成反面朝上為止。試程式設計找出步數最少的翻法,輸出最少步數及翻法。input 從鍵盤輸入乙個正整數n 6 n 20000 表示硬幣的數量。output 第1行 乙個整數,表示最少步數 第2行至...

BFS 翻幣問題

description 有n個硬幣 6 n 20000 全部正面朝上排成一排,每次將其中5個硬幣翻過來放在原位置,直到最後全部硬幣翻成反面朝上為止。試程式設計找出步數最少的翻法,輸出最少步數及翻法。input 從鍵盤輸入乙個正整數n 6 n 20000 表示硬幣的數量。output 第1行 乙個整數...

BFS 翻幣問題

description 有n個硬幣 6 n 20000 全部正面朝上排成一排,每次將其中5個硬幣翻過來放在原位置,直到最後全部硬幣翻成反面朝上為止。試程式設計找出步數最少的翻法,輸出最少步數及翻法。input 從鍵盤輸入乙個正整數n 6 n 20000 表示硬幣的數量。output 第1行 乙個整數...