java使用鏈表實(shí)現(xiàn)約瑟夫環(huán)
約瑟夫環(huán)是一個數(shù)學(xué)的應(yīng)用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報(bào)數(shù),數(shù)到m的那個人出列;他的下一個人又從1開始報(bào)數(shù),數(shù)到m的那個人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。求出出隊(duì)序列。
采用鏈表實(shí)現(xiàn),結(jié)點(diǎn)數(shù)據(jù)就是編號。
package com.dm.test;
public class Test2
{
public static void main(String[] args)
{
//頭結(jié)點(diǎn)
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;
}
//出隊(duì)列
//結(jié)束條件:只有一個結(jié)點(diǎn)時(shí),這個結(jié)點(diǎn)的next是它自身
//將出來的數(shù),放在一個數(shù)組中,遍歷數(shù)組就是出隊(duì)序列
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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java基于雙向環(huán)形鏈表解決丟手帕問題的方法示例
- Java用單向環(huán)形鏈表來解決約瑟夫環(huán)Josepfu問題
- Java數(shù)據(jù)結(jié)構(gòu)與算法之雙向鏈表、環(huán)形鏈表及約瑟夫問題深入理解
- Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之環(huán)形鏈表
- java 實(shí)現(xiàn)約瑟夫環(huán)的實(shí)例代碼
- Java解決約瑟夫問題代碼實(shí)例
- Java簡單實(shí)現(xiàn)約瑟夫環(huán)算法示例
- Java數(shù)據(jù)結(jié)構(gòu)之環(huán)形鏈表和約瑟夫問題詳解
相關(guān)文章
Java的JSON格式轉(zhuǎn)換庫GSON的初步使用筆記
GSON是Google開發(fā)并在在GitHub上開源的Java對象與JSON互轉(zhuǎn)功能類庫,在Android開發(fā)者中也大受歡迎,這里我們就來看一下Java的JSON格式轉(zhuǎn)換庫GSON的初步使用筆記:2016-06-06
Java常用正則表達(dá)式驗(yàn)證工具類RegexUtils.java
相信大家對正則表達(dá)式一定都有所了解和研究,這篇文章主要為大家分享了Java 表單注冊常用正則表達(dá)式驗(yàn)證工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
SpringBoot Entity中枚舉類型詳細(xì)使用介紹
本文介紹SpringBoot如何在Entity(DAO)中使用枚舉類型。(本文使用MyBatis-Plus)。在實(shí)際開發(fā)中,經(jīng)常會遇到表示類型或者狀態(tài)的情況,比如:有三種支付方式:微信、支付寶、銀聯(lián)。本文介紹如何這種場景的方案對比,并用實(shí)例來介紹如何用枚舉這種最優(yōu)雅的來表示2022-10-10
JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式
這篇文章主要介紹了JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Spring?Boot整合log4j2日志配置的詳細(xì)教程
這篇文章主要介紹了SpringBoot項(xiàng)目中整合Log4j2日志框架的步驟和配置,包括常用日志框架的比較、配置參數(shù)介紹、Log4j2配置詳解以及使用步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02
詳解SpringCloud Gateway之過濾器GatewayFilter
這篇文章主要介紹了詳解SpringCloud Gateway之過濾器GatewayFilter,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
SpringSecurity實(shí)現(xiàn)多種身份驗(yàn)證方式
本文主要介紹了SpringSecurity實(shí)現(xiàn)多種身份驗(yàn)證方式,包括表單的認(rèn)證、HTTP基本認(rèn)證、HTTP摘要認(rèn)證、證書認(rèn)證、OpenIDConnect或OAuth2.0的認(rèn)證、記住我功能和LDAP認(rèn)證,感興趣的可以了解一下2025-03-03

