约瑟夫环的java实现

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

直接给出代码,欢迎拍砖。

package com.timeng;

import java.util.ArrayList;  
import java.util.List;  
import java.util.Scanner;  
  
public class Yue {  
   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入总人数");
        int totalNum = sc.nextInt();
        System.out.println("请输入报数的大小");
        int countNum = sc.nextInt();
        yuesefu(totalNum,countNum);
    }
    public static void yuesefu(int totalNum,int countNum){
        //初始化人数
        List<Integer> start = new ArrayList<>();
        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);
            }
            //最后输出的数字
            if (start.size()==1){
                System.out.println("最后一个数字:"+start.get(0));
            }
        }
    }
}

结果:

请输入总人数
5
请输入报数的大小
3
移除的数字位:3
移除的数字位:1
移除的数字位:5
移除的数字位:2
最后一个数字:4
移除的数字位:4
发布了36 篇原创文章 · 获赞 161 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/weixin_42476601/article/details/88672187