zoukankan      html  css  js  c++  java
  • 约瑟夫环

    论坛里别人问的问题在此记录下来

    已知n个人围坐在一张圆桌周围,从编号为1的人开始报数,数到m的那个人出列。下一个人从1开始报数,数到m的人继续出列,以此类推直至全部人出列。求出列顺序?

    这个问题基于链表最通俗易懂,当然通过数组或者其他方式也可以实现。

    Node.java
    public class Node {
    	// 当前的索引
    	int data;
    	// 下一个节点
    	Node next;
    
    	Node(int i) {
    		this.data = i;
    	}
    }
    
    Main.java
    public static void main(String[] args) {
    
    		//初始化第一个节点
    		Node first = new Node(1);
    		//第一个节点的下一个节点null
    		first.next = null;
    		
    		//当前节点循环的时候判断
    		Node current = first;
    
    		//构造节点
    		for (int i = 2; i <= 50; i++) {
    			//从第2个节点开始模拟到50
    			Node temp = new Node(i);
    			temp.next = null;
    			//移动节点
    			current.next = temp;
    			current = temp;
    		}
    		//最后的一个节点和第一个首尾连接
    		current.next = first;
    
    		System.out.println("出列顺序为");
    		//判断是否只剩下最后一个
    		while (current != current.next) {
    			//循环报数1和2
    			for (int i = 1; i < 3; i++) {
    				//移动当前的节点
    				current = current.next;
    			}
    			//第一次循环current是第2个节点
    			System.out.print(current.next.data+" " );
    			//第一次循环current是第2个节点和第4个进行连接
    			current.next = current.next.next;
    		}
    
    		System.out.print("
    最后剩余" + current.data);
    	}
    
    
  • 相关阅读:
    抽象类
    类初始化
    final关键字
    super关键字
    继承
    常用类

    封装
    方法重载
    031:Cetus sharding
  • 原文地址:https://www.cnblogs.com/tonyY/p/5051794.html
Copyright © 2011-2022 走看看