首页 > 编程 > Java > 正文

Java实现约瑟夫环问题

2019-11-06 07:14:10
字体:
来源:转载
供稿:网友

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

/** * @author 16026 * */import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Yue { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.PRint("请输入总人数:"); int totalNum = scanner.nextInt(); System.out.print("请输入报数的大小:"); int cycleNum = scanner.nextInt(); yuesefu(totalNum, cycleNum); scanner.close(); } public static void yuesefu(int totalNum, int countNum) { // 初始化人数 List<Integer> start = new ArrayList<Integer>(); for (int i = 1; i <= totalNum; i++) { start.add(i); } // 从第K个开始计数 int k = 0; while (start.size() > 0) { k = k + countNum; // 第m人的索引位置 k = k % (start.size()) - 1; // 判断是否到队尾 if (k < 0) { System.out.println(start.get(start.size() - 1)); start.remove(start.size() - 1); k = 0; } else { System.out.println(start.get(k)); start.remove(k); } } }}

这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表