用java解决约瑟夫循环问题_Java采用循环链表结构求解约瑟夫问题
本文實例講述了Java采用循環鏈表結構求解約瑟夫問題的方法。分享給大家供大家參考。具體分析如下:
這是第一次java考試的試題,對于沒看過鏈表的同學來說就不會做,現在回頭看看,還真不難。
約瑟夫問題:有n個人,其編號分別為1,2,3,…,n。這n個人按順序排成一個圈。現在給定s和d,從第s個人開始從1依次報數,數到d的人出列,然后又從下一個人開始又從1開始依次報數,數到d的人又出列,如此循環,直到最后所有人出列為止。要求定義一個節點類,采用循環鏈表結構求解約瑟夫問題。
以下java版的答案:
import java.util.Scanner;
public class LinkNode {????????????? //單向鏈表的節點類
public int data;???????????????? //存放節點值
public LinkNode next;??????????? //存放節點值的引用
public LinkNode(int k){???????? //構造方法 ,值為k的節點
data = k;
next= null;
}
}
class Josephus{
public static void printJosephus(int n,int s,int d){
int i=1;??????????????????? //創建長為n的循環列表
LinkNode q,tail;
LinkNode head = new LinkNode(i);
head.next = head ;
tail = head;???????????? //第一個節點,尾巴和頭在一起
while(i
i++;
q = new LinkNode(i);??? //增加一個新節點
q.next = head ;??????? //節點的引用指向頭
tail.next = q;??????????? //最后一個元素的引用指向了q
tail = q;????????????? //那么最后一個元素就是q
}
int j= 0;?????????????? //從s開始報數,依次輸出出列人的編號 ??????? LinkNode p = head;????? //計數起點 ??????? while(j
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解决约瑟夫循环问题_Java采用循环链表结构求解约瑟夫问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python海龟编辑器画小汽车_【海龟编
- 下一篇: odis工程师使用方法_傅里叶红外光谱仪