c 解決約瑟夫環問題

2021-10-04 09:03:35 字數 1111 閱讀 8387

c++解決約瑟夫環問題

約瑟夫(josephus)問題:

m個人圍坐成一圈,從1開始順序編號

遊戲開始,從第乙個人開始由1到n迴圈報數

報到m的人退出圈外
問:

最後留下的那個人原來的序號

本題可以定義乙個容器(vector),初始化大小(元素個數)為n。容器裡元素的值標識該人是否出局,1在圈內,0出局。值為0的人不再參與報數,可以用乙個整數型k做計數器,採用倒計數,記錄留下的人數。

引用庫

#include

#include

using

namespace std;

利用乙個main函式解決問題,並完成初始化

int

main()

left[i % m]=0

;//找到最後乙個並置零

p = i +1;

//尋找下乙個迴圈開始位置

while(1

) number = p%m;

k--;}

注意:報數過程和開始下次報數時都要進行判斷,當前所在位置其值是否為0,若為0則要跳過。

#include

#include

using

namespace std;

intmain()

left[i % m]=0

;//找到最後乙個並置零

p = i +1;

//尋找下乙個迴圈開始位置

while(1

) number = p%m;

k--;}

cout <<

"最後剩下的人為:"

<< number +

1<<

"號";

return0;

}

歡迎指正

用C 解決約瑟夫環的問題

猶太歷史學家弗拉维奧 約瑟夫在他的日記中提到過這麼乙個問題 他和他的40個戰友被羅馬軍隊包圍在洞中。它們討論是自殺還是投降,最終決定採用抽籤的方式決定自殺的順序。演算法是這樣的 所有人站成一圈,依次報數從1到3,每報到3的則自殺,下乙個再從1開始報數。這樣,所有人會依次自殺,直到最後乙個。那最後乙個...

約瑟夫環問題的解決

約瑟夫環問題介紹 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include include typedef int datat...

python解決約瑟夫環問題

問題描述 編號為 1 n 的 n 個士兵圍坐在一起形成乙個圓圈,從編號為 1 的士兵開始依次報數 1,2,3 這樣依次報 數到 m 的 士兵會被殺死出列,之後的士兵再從 1 開始報數。直到最後剩下一士兵,求這個士兵的編號。有用遞迴函式 f n,m 的返回結果是存活士兵的編號,推導出old 與 new...