【算法】1、约瑟夫环

简介: 有n 个人围城一圈每次从1数起数到3就把那个人提出圈子,最后只保留一个人。 输入: 输入人数字符串输出:把最后一个人所保留位置返回出来。比如你输入11 的话即有11个人 [1,2,3,4,5,6,7,8,9,10,11] 。

 

有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);
    }

 

目录
相关文章
|
5月前
约瑟夫环问题的几种解法
约瑟夫环问题的几种解法
74 0
|
6月前
|
算法
约瑟夫环问题(三种方法)
约瑟夫环问题(三种方法)
94 0
|
9月前
|
Java
(五)Java数据结构之循环链表解决约瑟夫(Josephus)环问题
(五)Java数据结构之循环链表解决约瑟夫(Josephus)环问题
65 0
|
10月前
|
算法 索引 Python
细究“约瑟夫环”
细究“约瑟夫环”
77 0
|
11月前
约瑟夫环问题
使用queue<int>q记得加上头文件#include<queue>
55 0
|
JSON 算法 JavaScript
日拱算法:典例-快慢指针解“环形链表”
本篇带来一道基础但典型的体现快慢指针思路的算法题:环形链表 快慢指针是双指针的一种,用于判断链表是否有闭环,十分好用~ 冲ヾ(◍°∇°◍)ノ゙
|
Java
约瑟夫环问题Java实现
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出圈;他的下一个人又从 1 开始报数,数到 m 的那个人又出圈;依此规律重复下去,直到剩余最后一个胜利者。
94 0
|
算法 C语言 索引
「算法」约克瑟夫环
本文章纯属整合了一些约克瑟夫环的解法,均为C语言(毕竟还是小白),很多解法都是有出处的(均留了链接),只是暂时发表一篇试试水。如有侵权请留言。
84 0
约瑟夫环
题目: 已知n个人(以编号1,2,3--n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人有出列;以此规律重复下去,知道圆桌周围的人全部出列。输出出列顺序和最后剩下的人。
74 0