一堆猴子都有編號,編號是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 設定並刪除該位...