约瑟夫环java链表_java使用链表实现约瑟夫环
約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。求出出隊序列。
采用鏈表實現,結點數據就是編號。
package com.dm.test;
public class Test2
{
public static void main(String[] args)
{
//頭結點
Node root = new Node(1);
int[] order = build(root,9,5);
for(int i =0;i
{
System.out.print(order[i]+" ");
}
}
//將約瑟夫環建成一個鏈表
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;
}
//出隊列
//結束條件:只有一個結點時,這個結點的next是它自身
//將出來的數,放在一個數組中,遍歷數組就是出隊序列
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
{
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;
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
總結
以上是生活随笔為你收集整理的约瑟夫环java链表_java使用链表实现约瑟夫环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java gui 结构_java gui
- 下一篇: java facade dao_java