約瑟夫環 自殺環問題 簡單明瞭的迴圈鍊錶版

2021-10-21 02:21:38 字數 1137 閱讀 6862

這是一道經典的鍊錶題

josephus有過的故事:39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓。於是決定了自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺。然後下乙個重新報數,直到所有人都自殺身亡為止。然而josephus 和他的朋友並不想遵從,josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲。

大致意思

一共有n個人圍坐在一起, 迴圈週期是m, 第乙個人報數1, 第二個人報數2, 當報數到m時, 這個人就會出列。 下乙個人繼續從1開始報數, 整個過程持續到所有人出列為止。 這種問題一般會問最後乙個出列的人是誰, 或者問你某個人是第幾個出列的。。。

對於學習了計算機的我們來說,重複性如此強的過程,當然要交給計算機來幫我們完成吶。所以我們一起來編寫這個程式吧。

建立乙個單向迴圈鍊錶(看題目而定),先建立乙個表頭,在把每個人乙個乙個的尾插進去,然後把頭尾相連。在模擬報數,把要自殺的人乙個乙個刪掉,最後留下來的那個,就是答案。

#include

#include

typedef

struct node node;

node*

creat

(int data)

//建立鍊錶

node*

creatnode

(node* head,

int data)

//插入節點

void

merge

(node* head, node* end)

//首尾相連

void

detele

(node* qian, node* need)

//刪除節點

intmain()

if(i!=

(n-1))

}printf

("%d"

, qian-

>data)

;return0;

}

謝謝**!陣列模擬實現和數學推理法在這裡!

約瑟夫環的問題

約瑟夫環問題 假設有n個人 每當數到m的時候 就將第m個人出列 接下來從m 1個人開始從1數去 每當數到m的時候就出列 第一次出列一定是編號為 m n 1 剩下的人開始形成乙個新的約瑟夫環 從編號為m n開始計數 假設 k m n 則新的約瑟夫環為 k k 1 k 2 k 3 n 2 n 1 n 0...

約瑟夫環的簡單解析

本人也是初涉部落格,會盡量寫的清楚以便大家理解 今天我們就來講解約瑟夫環問題 首先看看題目 約瑟夫問題 輸出最後的編號 description n個人圍成一圈,依次從1至n編號。從編號為1的人開始1至k報數,凡報數為k的人退出圈子,輸出最後留下的乙個人原來的編號。input 首先輸入乙個t,表示有t...

約瑟夫環問題想到的

約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。在思考這個題目時,想到了很多,開始時,是考慮使用直接一遍一遍的遍歷,但...