Java采取輪回鏈表構造求解約瑟夫成績。本站提示廣大學習愛好者:(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<n){
i++;
q = new LinkNode(i); //增長一個新節點
q.next = head ; //節點的援用指向頭
tail.next = q; //最初一個元素的援用指向了q
tail = q; //那末最初一個元素就是q
}
int j= 0; //從s開端報數,順次輸入出列人的編號
LinkNode p = head; //計數終點
while(j<s-1){
j++;
p = p.next;
}
while(p.next != p){
j = 1;
while(j<d-1) //計數的肇端點
{
j++;
p = p.next;
}
System.out.print(p.next.data + " "); // 輸入出列的節點號
p.next = p.next.next;
p = p.next; //赓續指向下一個節點
}
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法式設計有所贊助。