A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余旋 中级黑马   /  2015-11-8 12:25  /  223 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马