黑马程序员技术交流社区

标题: 约瑟夫环!很有意思的!谁用集合来写! [打印本页]

作者: 安卓安小虾    时间: 2014-11-10 23:04
标题: 约瑟夫环!很有意思的!谁用集合来写!
  * 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
  * 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  *   
  */
public static void main(String[] args) {  
  int s = 0;  
  int m = 14;
  for(int i=2; i<=100; i++) {   
  s = (s+m)%i;
  }  
  System.out.println("最终会留下的人的编号为:" + (s+1));
}
}

作者: 李春江    时间: 2014-11-11 10:43
不错,顶一下
作者: huoxy    时间: 2014-11-11 10:57
代码很简单,思想挺难的!顶一个!
作者: M_______r    时间: 2014-11-11 14:06
package cn.itcast.demo;

import java.util.ArrayList;

public class Demo33 {

        /**
         * @param args
         * 假如是8个人  每数三下就杀一个人 ,这就是杀人游戏约瑟夫环吧 。
         */
        public static void main(String[] args) {
                int num = getLuklyNum(8);
                System.out.println("最后剩下的数字是"+num);//7

        }

        private static Integer getLuklyNum(int num) {
                int count = 1;             //计数器
                ArrayList<Integer> list = new ArrayList<>();
                for (int i = 1; i <=num; i++) {                         //将数字12345678存入集合
                        list.add(i);
                }
                for (int i = 0;list.size()!=1; i++) {               //从0索引开始遍历集合 当 索引为8的时候重新从0开始
                        if(i==list.size())
                                i=0;
                       
                        if(count%3==0)                         //数3下就要 移除一个元素,索引需--这样才保证每个数字都能 数到
                                list.remove(i--);
                                count++;
                }
                return list.get(0);                       //返回最后剩下的那个 就是0索引的数字 既是存活下来的人
        }

}


作者: 安卓安小虾    时间: 2014-11-11 14:07
M_______r 发表于 2014-11-11 14:06
package cn.itcast.demo;

import java.util.ArrayList;

真棒!!谢谢!!
作者: M_______r    时间: 2014-11-11 14:10
偶然看到你的贴 不用谢 嘎嘎
作者: 钟道上    时间: 2015-1-8 14:09
看不懂求解释啊
作者: HHFSpeed    时间: 2015-1-8 18:49
都是大神级别




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