黑马程序员技术交流社区

标题: 约瑟夫问题 [打印本页]

作者: 余旋    时间: 2015-11-8 12:25
标题: 约瑟夫问题
  1. package com.oxbridge.cos;

  2. import java.util.LinkedList;
  3. import java.util.List;
  4. /*约瑟夫问题,一个人数为N的环,从第K个元素开始报数,数到第M个元素,将这个元素从环中移除
  5. *
  6. */
  7. public class MathDemo {
  8.         public static void main(String[] args) {
  9.                 //定义一个集合用于存放人的编号,由于移除动作较多选择LinkedList
  10.                 List<Integer> list = new LinkedList<Integer>();
  11.                 for(int i=1;i<=N;i++)
  12.                 {
  13.                         list.add(i);
  14.                 }
  15.                 //用一个成员变量记录开始的位置
  16.                 int next = K-1;
  17.                 //最后剩余一人,可知要删除N-1个元素
  18.                 for(int time=1;time<=N-1;time++)
  19.                 {
  20.                         //从开始位置往下数第M-1个元素就是要移除的元素,移除后List发生变化
  21.                         next = (next+M-1)%list.size();
  22.                         list.remove(next);
  23.                 }
  24.                 //最后集合中剩下的元素就是那个没有出去人的编号
  25.                 System.out.println(list.get(0));
  26.         }
  27. }
复制代码

从网上学习来的解题思路,分享一起学习下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2