n個人圍成乙個環,從第乙個人開始,有1至m不斷報數,,凡報到m的出列,直到環中只剩下乙個人為止,輸出最後乙個人的序號。
如果要用鍊錶實現,很容易想到要建立單向環形鍊錶,及將尾節點中的next指標賦值為頭節點的位址。然後從頭節點開始遍歷,如果遇到符合條件的節點,對其進行鍊錶刪除處理,並將n減1,直到n為1時停止遍歷。
下面是該問題的帶有注釋的完整**:
#include
using
namespace std;
int n, m, count;
struct node
;//每個節點的結構
void
createlist
(node *
&head)
p->next = head;
//將尾節點中的next賦值為頭節點的位址,建立單向環形鍊錶
}int
ans(node *head)
//進行鍊錶中節點刪除處理
else
head = head-
>next;
}return head-
>num;
//返回剩下的乙個人的序號
}int
main()
其實,當進行節點刪除處理時,如果等到count%3==0時在進行處理,會比較麻煩,但如果在(count+1)%3==0時進行處理,及當即將要刪除的節點時當前所在節點的下乙個節點時,會容易得多。
約瑟夫 環 問題 Josephu 單向環形鍊錶
建立人 wdl 建立時間 2021 3 19 描述 public class josepfu 建立乙個環形的單向鍊錶 class circlesinglelinkedlist boy curboy null 輔助指標,幫助我們構建環形鍊錶 使用for來建立我們的環形鍊錶 for int i 1 i ...
約瑟夫問題 單向環形鍊錶
約瑟夫問題的示意圖 josephu 問題 josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到 m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此 產生乙個出隊編號的序列。...
單向環形鍊錶(約瑟夫問題)
josephu 問題 josephu問題為 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人 從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生 乙個出隊編號的序列。提示用乙個不帶頭結點的迴圈鍊錶來處理josep...