- package com.oxbridge.cos;
- import java.util.LinkedList;
- import java.util.List;
- /*约瑟夫问题,一个人数为N的环,从第K个元素开始报数,数到第M个元素,将这个元素从环中移除
- *
- */
- public class MathDemo {
- public static void main(String[] args) {
- //定义一个集合用于存放人的编号,由于移除动作较多选择LinkedList
- List<Integer> list = new LinkedList<Integer>();
- for(int i=1;i<=N;i++)
- {
- list.add(i);
- }
- //用一个成员变量记录开始的位置
- int next = K-1;
- //最后剩余一人,可知要删除N-1个元素
- for(int time=1;time<=N-1;time++)
- {
- //从开始位置往下数第M-1个元素就是要移除的元素,移除后List发生变化
- next = (next+M-1)%list.size();
- list.remove(next);
- }
- //最后集合中剩下的元素就是那个没有出去人的编号
- System.out.println(list.get(0));
- }
- }
复制代码
从网上学习来的解题思路,分享一起学习下 |
|