// 練習.cpp : 定義控制台應用程式的入口點。
//約瑟夫環問題,其實類似的題很多解法不盡相同。
//說有n只猴子,圍成乙個圈圈,從第一只猴子開始報數,由1-m,第m個人淘汰,也可以說殺掉,
//然後從第m+1個開始重頭查數,到第n只猴子後又會從第乙個開始查,直至剩下最後乙個猴子,
//我們尊稱為「活著的猴王」。
#include
"stdafx.h"
#include
using
namespace std;
intmonkeyking
(int total,
int cycle)
//定義乙個函式,輸入total為猴子總數,cycle為報的數,
//最後返回剩下猴子的位置,即陣列的下標
said =
(said == cycle ?
1: said +1)
;//活的猴子才會報數,從1到cycle迴圈
cout << endl;
} position =
(position>total -1?
0: position +1)
;//猴子的順序控制環,不管猴子死活,下乙個猴子下標,從0開始到達total-1再從頭來
}//就剩乙個猴子了,則他就是唯一乙個活著的王,此時檢視monkey_s陣列中猴子狀態
for(position =
0; monkey_s[position]
==false
; position++);
return position+1;
//返回活著的猴子下標,實際猴子的編號為position+1
}int
main()
需找新的美猴王 約瑟夫環 猴王問題
曰 初時,天地混沌未開,後盤古生而開之,三皇五帝治世,世界遂分四大部洲。東洲有山,曰花果山,天生一石猴,石破天驚,王於群猴。求藝,實菩提名之曰 悟空 後悟空大鬧天宮,為佛祖所困,五百載,為觀音點化,乃保唐曾取經,歷八十一難而成正果,封鬥戰勝佛,自此聞達三界,而昔日 美猴王 之名亦漸成經久之傳說 話說...
關於約瑟夫環問題的理解
有序列 0,1,2,3.n 1 可以將0 n 1的序列值理解為任意陣列下標 每次刪除第m個,注意該序列首尾相連,即n 1的下乙個為0,問最後剩下的數字是多少?此問題被稱為約瑟夫環問題,可以用列舉找規律解決,但也可以使用動態規劃來思考 1 記1 n 1序列最後剩下的數字為 f n,m 其中n表示有n個...
約瑟夫問題(關於小猴)
約瑟夫問題 有n只猴子,按順時針方向圍成一圈選大王 編號從1到n 從第1號開始報數,一直數到m,數到m的猴子退出圈外,剩下的猴子再接著從1開始報數。就這樣,直到圈內只剩下乙隻猴子時,這個猴子就是猴王,程式設計求輸入n,m後,輸出最後猴王的編號。input 每行是用空格分開的兩個整數,第乙個是 n,第...