zoukankan      html  css  js  c++  java
  • 【算法】1、约瑟夫环

    有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);
        }
  • 相关阅读:
    Java IO/NIO
    LeetCode—— 两两交换链表中的节点
    LeetCode——合并K个排序链表
    LeetCode第201场周赛
    LeetCode第202场周赛
    LeetCode215. 数组中的第K个最大元素
    LeetCode213. 打家劫舍 II
    LeetCode212. 单词搜索 II
    LeetCode211. 添加与搜索单词
    LeetCode210. 课程表 II
  • 原文地址:https://www.cnblogs.com/ae6623/p/4416292.html
Copyright © 2011-2022 走看看