PTA7 28 猴子選大王(約瑟夫環)

2021-09-12 23:00:47 字數 883 閱讀 4951

一群猴子要選新猴王。新猴王的選擇方法是:讓n只候選猴子圍成一圈,從某位置起順序編號為1~n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?

輸入在一行中給乙個正整數n(≤1000)。

在一行中輸出當選猴王的編號。

11
7
#includeint main()

我最初的想法是用迴圈鍊錶,但感覺這道題還不至於用到資料結構的知識,而且迴圈鍊錶時間複雜度很糟糕,所以想用c語言實現。

第一次接觸約瑟夫環問題,也可能是時間間隔太遠忘記了。本題不再自己寫**。

#includeint main()

for (i = n - 1; i >= 0; i--)

monkey[i] = temp;

} }printf("%d", monkey[0]);//陣列頭就是猴王

return 0;

}

該方法解析如下:

0 1 2 3 4 5 6 7 8

原序列:1 2 3 4 5 6 7 8 9

新序列:2 3 4 5 6 7 8 9 1

3 4 5 6 7 8 9 1 2

4 5 6 7 8 9 1 233為第乙個退出的數字

新一輪:5 6 7 8 9 1 2 4 3

6 7 8 9 1 2 4 5 3

7 8 9 1 2 4 563     6退出

繼續進行迴圈,最後陣列0號裡的數字即為所求。

PTA 約瑟夫環(猴子選大王) 詳解

n個人圍成一圈順序編號,從1號開始按1 2 3 順序報數,報p者退出圈外,其餘的人再從1 2 3開始報數,報p的人再退出圈外,以此類推。請按退出順序輸出每個退出人的原序號。輸入格式 輸入只有一行,包括乙個整數n 1 n 3000 及乙個整數p 1 p 5000 輸出格式 按退出順序輸出每個退出人的原...

PTA 猴子選大王 (約瑟夫環問題)

一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?輸入在一行中給乙個正整數n 10...

7 28 猴子選大王 數學的約瑟夫環問題思考

一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?輸入格式 輸入在一行中給乙個正整...