java使用鏈表實現(xiàn)約瑟夫環(huán)
約瑟夫環(huán)是一個數(shù)學的應(yīng)用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數(shù),數(shù)到m的那個人出列;他的下一個人又從1開始報數(shù),數(shù)到m的那個人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。求出出隊序列。
采用鏈表實現(xiàn),結(jié)點數(shù)據(jù)就是編號。
package com.dm.test; public class Test2 { public static void main(String[] args) { //頭結(jié)點 Node root = new Node(1); int[] order = build(root,9,5); for(int i =0;i<order.length;i++) { System.out.print(order[i]+" "); } } //將約瑟夫環(huán)建成一個鏈表 public static int[] build(Node root,int n, int m) { Node current = root; for(int i = 2; i<=n; i++) { Node node = new Node(i); current.next = node; current = node; } current.next = root; int[] order = come(root,n,m); return order; } //出隊列 //結(jié)束條件:只有一個結(jié)點時,這個結(jié)點的next是它自身 //將出來的數(shù),放在一個數(shù)組中,遍歷數(shù)組就是出隊序列 public static int[] come(Node root,int n, int m) { int[] order = new int[n]; int j = 0; Node p = root; while(p.next!=p) { int i = 1; while(i<m-1) { p=p.next; i++; } if(i==m-1) { order[j]=p.next.data; j++; p.next = p.next.next; p=p.next; } } order[j]=p.data; return order; } } class Node { int data; Node next; public Node(int data) { this.data = data; next= null; } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類實例
這篇文章主要介紹了Java實現(xiàn)將數(shù)字日期翻譯成英文單詞的工具類,結(jié)合完整實例形式分析了Java日期轉(zhuǎn)換與字符串操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-09-09mybatis Map查詢結(jié)果下劃線轉(zhuǎn)駝峰的實例
這篇文章主要介紹了mybatis Map查詢結(jié)果下劃線轉(zhuǎn)駝峰的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09JAVA實現(xiàn)社會統(tǒng)一信用代碼校驗的方法
這篇文章主要介紹了JAVA實現(xiàn)社會統(tǒng)一信用代碼校驗的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07SpringBoot統(tǒng)一數(shù)據(jù)返回的幾種方式
在Web應(yīng)用程序開發(fā)中,統(tǒng)一數(shù)據(jù)返回格式對于前后端分離項目尤為重要,本文就來介紹一下SpringBoot統(tǒng)一數(shù)據(jù)返回的幾種方式,具有一定的參考價值,感興趣的可以了解一下2024-07-07SpringMVC使用MultipartResolver實現(xiàn)文件上傳
MultipartResolver 用于處理文件上傳,當收到請求時 DispatcherServlet 的 checkMultipart() 方法會調(diào)用 MultipartResolver 的 isMultipart() 方法判斷請求中是否包含文件2023-02-02