(easy版本)已知 n 個人(以編號1, 2, 3 ,4, 5 ,6 ... .. .n)圍坐一張圓桌周圍。從編號為s 的人開始報數,數到m 的那個人出列;他的下乙個人又從 1開始報數,數到m的那個人又出列;依次規律重複下去,直到圓桌周圍的人全部出列。
#include using namespace std;
struct node
;main()
current->next=head;
current = head; //遍歷迴圈鍊錶,輸出序列
dowhile(current!=head);
current = head; //將current置於第s個位置
for(int i=1;inext;
}cout << endl;
for(int i=1;i<=n;i++) //共迴圈n輪,得到乙個整體的輸出序列
cout << current->data << " ";
prev->next = current->next;
delete current;
current = prev->next;}}
(hard版本)題目:約瑟夫雙向生死遊戲是在約瑟夫生者死者遊戲的基礎上,正向計數後反向計數,然後再正向計數。具體描述如下:30(numofpeople)個旅客同乘一條船,因為嚴重超載,加上風高浪大,危險萬分;因此船長告訴乘客,只有將全船一半(numofkilled)的旅客投入海中,其餘人才能倖免遇難。無奈,大家只得同意這種辦法,並議定30個人圍成一圈,由第乙個人開始,順時針依次報數,數到第9(forwardcount)人,便把他投入大海中,然後從他的順時針的下乙個人數起,逆時針數到第5(reversecount)人,將他投入大海,然後從他逆時針的下乙個人數起,順時針數到第9人,再將他投入大海,如此迴圈,直到剩下15個乘客為止。問哪些位置是將被扔下大海的位置。
#include using namespace std;
struct node
;main()
current->next=head->next;
head->next->prior=current;
current = head->next; //遍歷迴圈鍊錶,輸出序列
for(int i=1;i<=n;i++)
current = head->next; //將current置於第s個位置
for(int i=1;inext;
}cout << endl;
for(int i=1;i<=15;i++) //共迴圈***,得到乙個輸出序列
cout
prev->next=current->next;
current->next->prior=prev;
delete current;
current=prev->next;
}else //逆向
cout
prev->prior=current->prior;
current->prior->next=prev;
delete current;
current=prev->prior;}}
return 0;
}
截圖:
C 約瑟夫(Josephus)問題
一 題目 約瑟夫問題 n個人圍成一桌,數到m的人出列 二 實現方法1 每齣列乙個,就往前移動陣列,用求餘解決到尾問題 每齣列乙個,就往前移動陣列 用求餘解決到尾問題 include void josephus int n,int m,int start std cout arr 0 n int ma...
Josephus 約瑟夫 問題
問題描述 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到剩下最後乙個人。程式的意圖是求出最後留下的人的編號。c 實現 include include include u...
約瑟夫(Josephus)問題
一群小孩圍成一圈,任意假定乙個數n,從第乙個小孩起,順時針方向數,每數到第m個小孩時,該小孩便離開。小孩不斷離開,圈子不斷縮小。最後剩下的乙個小孩便是勝者。求勝者的編號?函式名稱 josephus 作 成 者 erick.wang 作成日期 2016 07 19 返 回 值 void 參 數 m,n...