约瑟夫问题 java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约瑟夫问题 java相关的知识,希望对你有一定的参考价值。
约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列
知识补充:
List接口主要有两个实现类,ArrayList和LinkedList类。在List集合中允许出现重复的元素,与Set集合不同的是,List集合中的元素都是有序的,可以根据索引位置来检索List集合中的元素,第一个被添加进来的元素的索引为0,第二个为1,依次类推
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test{ 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); } public static void yuesefu(int totalNum, int countNum) { // 初始化人数 List<Integer> start = new ArrayList<Integer>();//创建List集合 ,且集合中存放的是整型
//正确的创建13个数的方法如下:
// List<Integer> list=new ArrayList<Integer>(new Integer(13)); 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; // System.out.println(start.size()); // 判断是否到队尾 if (k < 0) { System.out.println(start.get(start.size()-1)); System.out.println(3333); start.remove(start.size() - 1); k = 0; } else { System.out.println(start.get(k));//通过索引获取所对应的值 start.remove(k); //删除指定位置的元素 } } } }
以上是关于约瑟夫问题 java的主要内容,如果未能解决你的问题,请参考以下文章