資料結構與演算法 約瑟夫問題

2021-10-01 16:27:14 字數 1574 閱讀 8685

問題描述:編號為1、2、… n 的小朋友圍成一圈,從編號為k( 1< k < n) 的小朋友開始報數,報到m的小朋友出列,該小朋友的下一位重新開始從0開始報數,數到m的小朋友再次出列,依次類推,直到所有小朋友出列。由此產生乙個出列編號的佇列。

package 鍊錶;

/** * @author lyq on 2019-12-23 10:42 下午

* @desc 利用單向環形列表解決約瑟夫問題

*/public

class

josephproblem

public

intgetno()

public

void

setno

(int no)

public node getnext()

public

void

setnext

(node next)

@override

public string tostring()

';}}

/** * 單向環形列表:first指向第乙個元素不變;輔助指標cur指向當前節點;最後乙個節點的next指向first

*/private

static

class

roundlinkedlist

for(

int i =

1;i <= n;i++

)else

if(i == n)}}

/** * 列印出圈小孩順序

* @param startno 第一次報1的小孩位置

* @param step 出圈小孩報的數

* @param nums 初始小孩個數

*/public

void

outlist

(int startno,

int step,

int nums)

// 建立輔助指標,始終指向first指標的前乙個位置

node temp = first;

node helper = null;

while

(true

)else

}// 初始時將helper和first移動step-1位

for(

int i =

0;i < startno-

1;i++

)// 開始報數,每移動 step-1 位,移出first所在節點,first指標前移一位;直到圈中只有乙個節點

while

(true

)else

system.out.

printf

("移出節點:[%s] \n"

, first)

; first = first.next;

helper.next = first;}}

}}public

static

void

main

(string[

] args)

}

資料結構與演算法 約瑟夫問題

已知n個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從k開始報數,數到m的那個人又出列 一詞重複下去。直到圓桌的人全部出列。試用c 程式設計實現 include include include define error 0 type...

資料結構與演算法03 約瑟夫問題

約瑟夫問題 39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓。於是決定了自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺。然後下乙個重新報數,直到所有人都自殺身亡為止。然而josephus 和他的朋友並不想遵從,joseph...

演算法和資料結構 約瑟夫問題

package com.structure.demo import android.os.bundle import android.util.log public class josephactivity extends activity class circlesinglelinkedlist ...