約瑟夫環問題的解決

2022-02-24 05:04:57 字數 1156 閱讀 5652

約瑟夫環問題介紹

:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。

# include # include # include typedef int datatp;

typedef struct node

node;

typedef node* linklist;

node* creatlist(int n);

void makeloop(linklist phead);

void deletenode(linklist phead,linklist paim);

int main (void)

return 0;

}node* creatlist(int n)

phead->pnext=null;

/////////////////////////////////

for(i=0;ielem=i+1; //補全結點資訊

p1->pnext=null;

if(phead->pnext==null) //鏈結

phead->pnext=p1;

else

p2->pnext=p1;

p2=p1; //重置

}return phead;

}void makeloop(linklist phead)

void deletenode(linklist phead,linklist paim)

鍊錶初始狀態:

剛開始寫這個程式的時候,遇到乙個bug,那就是沒有解決鍊錶丟失問題。比如當退出的節點剛好為1號節點時

,1號節點就會被free掉,這樣就不能通過phead來訪問各個節點了,整個鍊錶就丟失了。

於是我在deletenode()函式裡加了乙個判斷:當刪除節點為第乙個資料節點時,更改頭節點的指標域的值,

使指向第乙個資料節點的下乙個節點,這樣鍊錶就不會丟失了。

約瑟夫環問題的解決

約瑟夫環問題介紹 已知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...

c 解決約瑟夫環問題

c 解決約瑟夫環問題 約瑟夫 josephus 問題 m個人圍坐成一圈,從1開始順序編號 遊戲開始,從第乙個人開始由1到n迴圈報數 報到m的人退出圈外問 最後留下的那個人原來的序號 本題可以定義乙個容器 vector 初始化大小 元素個數 為n。容器裡元素的值標識該人是否出局,1在圈內,0出局。值為...