一群猴子要選新猴王。新猴王的選擇方法是:讓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的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?輸入格式 輸入在一行中給乙個正整...