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

    ArrayList实现约瑟夫环

    ​ ​ 约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分。因此船长告诉乘客,只有将全船 一半的旅客投入海中,其余人才能幸免于难。无奈,大家只得同意这种办法,并议定30 个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从 他的下一个人数起,数到第9人,再将他投入大海中,如此循环地进行,直到剩下 15 个游客为止。问:哪些位置是将被扔下大海的位置?

    将 30 改为一个任意输入的正整数 n,而报数 上限(原为9)也为一个任选的正整数k

    代码实现

    
    package com.pkq.three;
    
    
    import java.util.ArrayList;
    
    /**
     * @author ピカチュウ(皮卡啾)
     * @date 2021/7/14 11:21
     * @Description: 30个人围成一圈,
     * 由第一个人数起,依次报数,数到第9人,便把他投入大海中,
     * 然后再从 他的下一个人数起,数到第9人,再将他投入大海中,如此循环地进行,直到剩下 15 个游客为止。
     * 问:哪些位置是将被扔下大海的位置?
     */
    public class Ysfh {
        /**
         * @param total   总人数
         * @param drop    扔人的位置
         * @param surplus 剩余人数
         */
        public void sfh(int total, int drop, int surplus) {
    
            int rm = 0;
            ArrayList<Object> list = new ArrayList<>();
    
            for (int i = 1; i <= total; i++) {
                list.add(i);
            }
            System.out.println(list);
    
            while (list.size() > surplus) {
                rm += drop - 1;
    
                // 当 rm 超出集合长度时,求余重新计算位置
                if (rm >= list.size()) {
                    rm %= list.size();
                }
                Object remove = list.remove(rm);
                System.out.println(list);
                System.out.println("删除了:" + remove);
    
            }
        }
    }
    
    
    

    结果演示

  • 相关阅读:
    窗体控件JFrame的使用
    WindowBuilder的安装与简介
    Swing事件机制
    Swing的MVC结构
    Swing框架的继承关系
    SWT简介
    Swing简介
    AWT简介
    Java界面设计
    使用Java建立聊天客户端
  • 原文地址:https://www.cnblogs.com/qqkkOvO/p/14190581.html
Copyright © 2011-2022 走看看