• 【算法】约瑟夫环


    有n 个人围城一圈每次从1数起数到3就把那个人提出圈子,最后只保留一个人。

    输入: 输入人数字符串
    输出:把最后一个人所保留位置返回出来。
    比如你输入11 的话即有11个人 [1,2,3,4,5,6,7,8,9,10,11] 。返回的是7

    package sj1;
     
    import java.util.ArrayList;
    import java.util.List;
     
    /**
     *
     * @author Administrator
     *  剔出某数字
     */
    public class sjt1_2 {
         
        int number; //总数
        int m;//要被剔除的数字
     
        /**
         * 剔除方法
         * @param number 总数
         * @param m 数数剔除的数字,比如3
         */
        public static void delete(int number, int m) {
            List<Integer> ins = new ArrayList<Integer>();
             
            /* 塞数字 */
            for (int i = 1; i < number+1; i++) {
                ins.add(i);
            }
            
            System.out.println("构造了原始值:" + ins);
     
            int index = 0;// 被T的人在列表中下标
            m = m-1;//减一算出下标
            for (int i = 0; i < number; i++) {
                //最后一个跳出
                if(ins.size() ==1 ){
                    break;
                }
                // 从0开始数数
                index = (index + m) % ins.size();//核心算法
                System.out.println(index);
                System.out.println("第 ["+(i+1)+"] 次剔除了" + ins.get(index));
                ins.remove(index);
                System.out.println("还剩下:" + ins);
            }
             
        }
     
        public static void main(String args[]) {
            delete(11, 3);
        }
  • 相关阅读:
    模拟ssh远程执行命令
    基于UDP协议的套接字编程
    TCP三次握手,四次挥手
    基于TCP协议的套接字编程
    osi七层协议
    Python之__class__.__module__,__class__.__name__
    异常处理
    单例模式
    类方法__setattr__,__delattr__,__getattr__
    反射(hasattr,getattr,delattr,setattr)
  • 原文地址:https://www.cnblogs.com/chuanyueinlife/p/10096117.html
Copyright © 2020-2023  润新知