迴圈單鏈表實現約瑟夫問題

2021-10-08 22:14:10 字數 2639 閱讀 5940

一堆猴子都有編號,編號是1,2,3 ...m,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最後乙隻猴子,則該猴子為大王。

本題實現:輸出出佇列的順序的編號

1.節點類
package yosepfu;

/** * @program: 3.鍊錶的相關操作

* @description: 編號類

* @author: zhou jian

* @create: 2020-07-12 14:51

*/public

class

numbers

public

intgetnum()

public

void

setnum

(int num)

public numbers getnext()

public

void

setnext

(numbers next)

@override

public string tostring()

';}}

2.迴圈單鏈表
public

class

numbermanage

// 使用for迴圈建立節點

// 使用乙個輔助指標來幫助遍歷鍊錶

numbers temp = null;

for(

int i =

1; i <= count; i++

)else}}

/** * 遍歷當前的鍊錶

*/public

void

showlist()

// 由於第乙個節點不能動,所以使用乙個輔助指標遍歷鍊錶

numbers temp = first;

system.out.

println

("節點編號:");

// 遍歷鍊錶

while

(true

)else}}

/** 核心演算法 (有點繞)

* @param startnumber 開始報數的節點的編號

* @param lastnumber 報數的個數

* @param counts 節點的個數

*/public

void

corefunction

(int startnumber,

int lastnumber,

int counts)

// 建立乙個輔助指標,用於將節點從鍊錶中取出

numbers helper = first;

// 預設helper指標指向鍊錶的最後乙個節點

while

(true

)// 繼續遍歷

helper = helper.

getnext()

;}// 在報數之前,應該讓helper和first指標移動到指定的位置(開始報數的位置)

// helper在first的前乙個位置

for(

int i =

1; i <= startnumber -

1; i++

) system.out.

println

("報數節點:");

while

(true

)// 在報數時,應該讓helper和first指標移動lastnumber-1次,直到迴圈鍊錶中只有乙個節點

for(

int i =

1; i <= lastnumber -

1; i++

)// first指向的是報數的節點

system.out.

print

(first.

getnum()

+" ");

// 刪除節點

first = first.

getnext()

; helper.

setnext

(first)

; system.out.

println()

;}// // 迴圈結束後,first指向的就是鍊錶中的最後乙個節點

// system.out.println("鍊錶中的最後乙個節點是:" + first.getnum());

}}

3.入口
package yosepfu;

/** * @program: 3.鍊錶的相關操作

* @description: 主函式

* @author: zhou jian

* @create: 2020-07-12 14:52

*//**

*一堆猴子都有編號,編號是1,2,3 ...m,這群猴子(m個)按照1-m的順序圍坐一圈,

* 從第1開始數,每數到第n個,該猴子就要離開此圈,這樣依次下來,

* 直到圈中只剩下最後乙隻猴子,則該猴子為大王。

* 本題實現:輸出出佇列的順序的編號

* */

public

class

main

}

約瑟夫環(約瑟夫問題) 採用迴圈單鏈表實現

yuesefuwenti.cpp 定義控制台應用程式的入口點。約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部...

約瑟夫問題實驗 迴圈單鏈表

一 實驗目的和要求 一 問題描述 設有n個人圍坐在圓桌周圍,現從某個位置m 1 m n 上的人開始報數,報數到k的人就站出來。下乙個人,即原來的第k 1個位置上的人,又從1開始報數,再報數到k的人站出來。依次重複下去,直到全部的人都站出來為止。試設計乙個程式求出這n個人的出列順序。二 問題分析 這是...

採用迴圈單鏈表實現約瑟夫環

演算法的基本思想 利用鍊錶和陣列,約瑟夫環問題中的資料時人所在的位置,而這個資料時存在 第一元素 最後元素 並且 存在唯一的前驅和後繼,符合線性表的特點,由於需要模擬約瑟夫環的出列問題,可以採用順序表來實現 線性表,完成出列順序的輸出,核心演算法主要分兩步 1 確定需要刪除的位置 2 設定並刪除該位...