約瑟夫問題(鍊錶解法)

2021-09-01 23:24:49 字數 776 閱讀 1972

編號為 1-n 的 n 個人圍坐在一起形成乙個圓圈,從第 p 個人開始,依次按照順時針的方向報數,數到第 m 個人出列,直到最後剩下乙個人。

請寫乙個程式,對於給定的n,p,m,計算並列印出依次出列的人的編號

#include using namespace std;

struct node ;

node *create(int n)

tail->next = head; //尾巴處理

head->ahead = tail;

return head; }

node *search(node *head, int p)

return head;

}node *release(node *head, int m)

temp->ahead->next = temp->next; //移除第m個節點

temp->next->ahead = temp->ahead; //移除第m個節點

cout << temp->num << ",";

head = temp->next; //釋放第m個節點所佔記憶體空間

約瑟夫問題的非鍊錶解法

無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來比較煩,而且時間複雜度高達o nm 當n,m非常大 例如上百萬,上千萬 的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最後的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效率,就要打破常規...

約瑟夫環的鍊錶解法

約瑟夫環 鍊錶解法 之前遇到乙個面試題,大意是 電梯裡一擁而上一群人,導致電梯超重,於是大家約定,站成一圈,任選一人開始報數,數到3的那個人出電梯,圈內的下乙個人重新從1開始報數,數到3的人再出電梯,一直這樣,直到電梯不超重。現給一串有序的數字,電梯超重需出去m個人,數到k的人出電梯,讓列出出電梯的...

OJ 約瑟夫環問題(迴圈鍊錶解法)

有n人圍成一圈,順序排號。從第1個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。輸入初始人數n 輸出最後一人的初始編號 樣例輸入 3樣例輸出 2故事背景 據說著名猶太歷史學家 josephus 有過以下的故事 在羅馬人占領喬塔帕特後,39個猶太人與josephus...