用Java实现约瑟夫环

开发 后端
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

什么是约瑟夫环呢?

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

我们用程序说话,实现约瑟夫环

  1. import java.util.Scanner; 
  2.  
  3. public class Josephus { 
  4.     private static class Node { 
  5.         public int no;// 编号 
  6.         public Node next;// 下一个节点 
  7.  
  8.         public Node(int no) { 
  9.             this.no = no; 
  10.         } 
  11.     } 
  12.  
  13.     public static void main(String[] args) { 
  14.         Scanner scanner = new Scanner(System.in); 
  15.         System.out.print("请输入总人数:"); 
  16.         int totalNum = scanner.nextInt(); 
  17.         System.out.print("请输入报数的大小:"); 
  18.         int cycleNum = scanner.nextInt(); 
  19.         Node header = new Node(1); 
  20.         Node pointer = header; 
  21.         for (int i = 2; i <= totalNum; i++) { 
  22.             pointer.next = new Node(i); 
  23.             pointer = pointer.next; 
  24.         } 
  25.         pointer.next = header; 
  26.         // 初始化环形链表结束 
  27.         System.out.println("以下是出列的顺序:"); 
  28.         while (pointer != pointer.next) { 
  29.             for (int i = 1; i < cycleNum; i++) { 
  30.                 pointer = pointer.next; 
  31.             } 
  32.             System.out.println(pointer.next.no); 
  33.             pointer.next = pointer.next.next; 
  34.         } 
  35.         System.out.println(pointer.next.no); 
  36.     } 

原文链接:http://tanlan.iteye.com/blog/1159502

【编辑推荐】

  1. Java 8整装待发 图谋云计算
  2. Java 7是蜜糖还是毒药?
  3. 选用Ibatis和Hibernate的区别
  4. JRuby和Java 7 我们可以期待什么
  5. 关于Eclipse使用64位Java 7崩溃的问题
责任编辑:艾婧 来源: tanlan的博客
相关推荐

2009-08-11 13:54:54

约瑟夫环算法C#算法

2021-04-08 19:20:58

循环链表模拟

2015-07-17 10:07:33

JAVA数字水印

2015-06-10 15:36:47

环信移动客服

2022-08-11 08:03:43

队列

2023-02-06 09:00:54

2011-06-16 09:15:24

光纤收发器交换机环网

2021-03-11 08:53:20

Java数据结构算法

2012-06-25 12:33:12

Java日志切割

2012-02-13 13:36:27

Java

2020-10-29 08:31:15

Java同步回调编程语言

2020-06-16 16:25:05

C++JavaPython

2015-07-30 16:18:14

企业网D1Net

2021-03-27 11:02:04

JavaScript队列编程语言

2009-06-19 14:23:41

RMIJava分布式计算

2009-06-30 15:19:00

阻塞读取远程文件Java多线程

2020-07-25 19:40:33

Java开发代码

2020-05-09 09:59:52

Python数据土星

2011-12-15 10:56:55

JavaNIO

2014-11-13 12:38:36

环信
点赞
收藏

51CTO技术栈公众号