約瑟夫迴圈 改

2021-10-01 11:53:21 字數 1367 閱讀 8162

此題根據約瑟夫問題改編。

首先定義乙個 內部類node,基於node來實現各種操作。

node 有兩個資料域來記錄密碼與位置,乙個指標域來指向下一條。這樣就形成了乙個單向鏈。當尾的下一條為頭時,就形成了單向環。

然後定義成員函式head 和 rear 用於指向鏈環的頭和尾,以及記錄元素個數的size。

然後建立建構函式,更具傳入整數來確定環的規模。然後用尾插法依次新增元素,建立時候隨機給每個節點分配乙個密碼,並依次給每個節點分配1~n的位置。

然後建立乙個進行迴圈刪點的直到剩餘兩個點方法,先建立乙個迴圈,設定直到size等於2停止。建變數p指向頭,新建變數code指向p中的密碼。然後再建立巢狀迴圈,每次根據code來確立迴圈次數。利用p=p.next;來移動p,因為是單向鏈環,為了方便把p移動到要刪除的元素前乙個就停止。然後把要刪除的元素的密碼給code。刪除後size–,再把p再往後移動一次開始下一次刪點迴圈。直到還剩兩個點時結束while迴圈。

然後建立tostring方法,自不待言,為了方便觀察我寫的為 密碼 括號位址括號完的格式。

建立主類來測試我們寫的**,可以先將剩2修改為剩9,剩8。。。。來觀察。

package josephusloop;

import listpackage.arraylist;

import listpackage.list;

//約瑟夫環問題

public

class

josephusloopplus

size = count;

}public

void

getsurviveposition()

node del = p.next;

code = del.cipher;

p.next = del.next;

p = p.next;

size--;}

}public string tostring()

while

(p != head)

; sb.

("\n");

return sb.

tostring()

;}private

class

node

public

node

(int position,

int cipher,node next)

}public

static

void

main

(string[

] args)

}

約瑟夫迴圈

題目 n個數字 0,1,n 1 形成乙個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字 第乙個為當前數字本身,第二個為當前數字的下乙個數字 當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m個數字。求出在這個圓圈中剩下的最後乙個數字。思路 建立乙個迴圈鍊錶,每次走m步刪除乙個節點,最後剩下乙個 ...

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

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

迴圈鍊錶(約瑟夫環)

約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。要通過輸入n,m,k三個正整數,來求出列的序列。這個問題採用的是典型的...