5 使用迴圈單向列表解決約瑟夫問題

2021-10-09 23:41:03 字數 2226 閱讀 5734

//建立乙個節點類

}//建立乙個環形的單向鍊錶

class

circlesinglelinkedlist

boynode curboy = null;

// 輔助節點,幫助構建環形鍊錶

//使用for迴圈來建立環形單向鍊錶

for(

int i =

1; i <= nums ; i++

)else}}

//遍歷當前環形鍊錶

public

void

showboy()

//因為first不能動,所以使用輔助變數

boynode curboy = first;

while

(true

) curboy = curboy.

getnext()

;}}//根據使用者的輸入,計算出出圈的人

// startno 表示從第幾個小孩開始數數,countnum表示一次數幾個,nums表示最初有幾個小孩

public

void

countboy

(int startno,

int countnum,

int nums)

//建立乙個輔助指標,幫助完成小孩出圈

boynode helper = first;

//需求建立乙個輔助指標helper,事先應該指向環形鍊錶的最後乙個節點

while

(true

) helper=helper.

getnext()

;}//小孩報數前,先讓first和helper 移動 k-1 次

for(

int j =

0;j1;j++

)//當小孩報數時,讓first和helper 指標同時移動 m-1 次,然後出圈

//這裡是乙個迴圈操作,直到圈中只有乙個節點

while

(true

)//讓first和helper指標同時移動countnum-1次,然後出圈

for(

int j =

0;j1;j++

)//這時first指向的節點,就是要出圈的節點

system.out.

printf

("小孩%d出圈\n"

,first.

getno()

);//這時將first指向的小孩節點出圈

first = first.

getnext()

; helper.

setnext

(first)

;//相當於把節點拿出去

} system.out.

printf

("最後留在圈中的小孩編號%d\n"

,helper.

getno()

);}}

//建立乙個節點類

用單向迴圈鍊錶解決約瑟夫環問題

設有n個人圍坐一圈,現以某個人開始報數,數到m的人出列,接著從出列的下乙個人開始重新報數,數到m的人又出列,如此下去,直到所有人都出列為止.按出列順序輸出.這段 是從網上找來的,在此特別說明!include stdlib.h struct ele main u link h 末表元後繼首表元,形成環...

單向環形鍊錶解決約瑟夫問題

package com.xkp.data.linkerlist author xkp version 1.0 classname josepfu description 單向環形煉表處理約瑟夫問題 date 2020 11 30 0030 23 12 public class josepfu cla...

迴圈鍊錶解決約瑟夫迴圈問題

最近開始複習資料結構,今天手寫了乙個約瑟夫迴圈問題。首尾相連的鍊錶 head last tail tail next head 建立迴圈鍊錶和建立普通鍊錶方法差不多,只需要首尾相連即可 已知 n 個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍,從編號為 k 的人開始順時針報數,數到 m 的那...