Java采用循環(huán)鏈表結(jié)構(gòu)求解約瑟夫問題
本文實例講述了Java采用循環(huán)鏈表結(jié)構(gòu)求解約瑟夫問題的方法。分享給大家供大家參考。具體分析如下:
這是第一次java考試的試題,對于沒看過鏈表的同學(xué)來說就不會做,現(xiàn)在回頭看看,還真不難。
約瑟夫問題:
有n個人,其編號分別為1,2,3,…,n。這n個人按順序排成一個圈?,F(xiàn)在給定s和d,從第s個人開始從1依次報數(shù),數(shù)到d的人出列,然后又從下一個人開始又從1開始依次報數(shù),數(shù)到d的人又出列,如此循環(huán),直到最后所有人出列為止。要求定義一個節(jié)點類,采用循環(huán)鏈表結(jié)構(gòu)求解約瑟夫問題。
以下java版的答案:
public class LinkNode { //單向鏈表的節(jié)點類
public int data; //存放節(jié)點值
public LinkNode next; //存放節(jié)點值的引用
public LinkNode(int k){ //構(gòu)造方法 ,值為k的節(jié)點
data = k;
next= null;
}
}
class Josephus{
public static void printJosephus(int n,int s,int d){
int i=1; //創(chuàng)建長為n的循環(huán)列表
LinkNode q,tail;
LinkNode head = new LinkNode(i);
head.next = head ;
tail = head; //第一個節(jié)點,尾巴和頭在一起
while(i<n){
i++;
q = new LinkNode(i); //增加一個新節(jié)點
q.next = head ; //節(jié)點的引用指向頭
tail.next = q; //最后一個元素的引用指向了q
tail = q; //那么最后一個元素就是q
}
int j= 0; //從s開始報數(shù),依次輸出出列人的編號
LinkNode p = head; //計數(shù)起點
while(j<s-1){
j++;
p = p.next;
}
while(p.next != p){
j = 1;
while(j<d-1) //計數(shù)的起始點
{
j++;
p = p.next;
}
System.out.print(p.next.data + " "); // 輸出出列的節(jié)點號
p.next = p.next.next;
p = p.next; //不斷指向下一個節(jié)點
}
System.out.print(p.data);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int a = input.nextInt();
int b = input.nextInt();
Josephus.printJosephus(n, a, b);
}
}
希望本文所述對大家的Java程序設(shè)計有所幫助。
相關(guān)文章
SpringMVC中RequestContextHolder獲取請求信息的方法
這篇文章主要介紹了SpringMVC中RequestContextHolder獲取請求信息的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
SpringBoot中GlobalExceptionHandler異常處理機制詳細說明
Spring Boot的GlobalExceptionHandler是一個全局異常處理器,用于捕獲和處理應(yīng)用程序中發(fā)生的所有異常,這篇文章主要給大家介紹了關(guān)于Java中GlobalExceptionHandler異常處理機制的相關(guān)資料,需要的朋友可以參考下2024-03-03
Eclipse+Java+Swing實現(xiàn)學(xué)生成績管理系統(tǒng)的實例代碼
這篇文章主要介紹了Eclipse+Java+Swing實現(xiàn)學(xué)生成績管理系統(tǒng),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Java中的CopyOnWriteArrayList深入解讀
這篇文章主要介紹了Java中的CopyOnWriteArrayList深入解讀,在 ArrayList 的類注釋上,JDK 就提醒了我們,如果要把 ArrayList 作為共享變量的話,是線程不安全的,需要的朋友可以參考下2023-12-12
JAVA裝飾者模式(從現(xiàn)實生活角度理解代碼原理)
裝飾者模式可以動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說,Decorator模式相比生成子類更為靈活。這篇文章主要介紹了JAVA裝飾者模式的相關(guān)資料,需要的朋友可以參考下2016-12-12
Java后端接口中提取請求頭中的Cookie和Token的方法
在現(xiàn)代 Web 開發(fā)中,HTTP 請求頭(Header)是客戶端與服務(wù)器之間傳遞信息的重要方式之一,本文將詳細介紹如何在 Java 后端(以 Spring Boot 為例)中提取請求頭中的 Cookie 和 Token,并提供完整的代碼示例和優(yōu)化建議,需要的朋友可以參考下2025-01-01

