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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 一个好人 于 2015-4-19 17:43 编辑

有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?


这道题我考虑了很久,还是没想到解决的办法

8 个回复

倒序浏览
回复 使用道具 举报
约瑟夫环的问题
回复 使用道具 举报
  1. /*
  2. 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
  3. 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?*/
  4. import java.util.ArrayList;
  5. import java.util.Iterator;
  6. class  DemoLength
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 ArrayList<Integer> arr = new ArrayList<Integer>();//创建一个存活的人的名单
  11.                 for(int i=1;i<=100;i++)
  12.                 {
  13.                         arr.add(i);//给名单上的人取名字
  14.                 }
  15.                 show(arr);//game开始
  16.                
  17.         }
  18.         private final static int kill=14;//第十四个人干掉
  19.         private static int count=0;//计数自增变量
  20.         public static void show(ArrayList<Integer> arr)
  21.         {
  22.                 ArrayList<Integer> buf = new ArrayList<Integer>();//收集将要被干掉的元素,死亡名单
  23.                 while(arr.size()>1)//如果集合大于1,继续循环
  24.                 {
  25.                         for(int i=0;i<arr.size();i++)//循环当前集合
  26.                         {
  27.                                 count++;//自增,开始数数
  28.                                 if(count%kill==0)//为14的倍数被干掉
  29.                                 {
  30.                                         buf.add(arr.get(i));//将要被干掉的人加入死亡名单
  31.                                 }
  32.                         }
  33.                         arr.removeAll(buf);//在存活的人中干掉死亡名单上的人。
  34.                         buf.clear();//清空死亡名单
  35.                 }
  36.                 System.out.println(arr);//输出最后存活的人
  37.                
  38.                
  39.         }
  40. }
复制代码
回复 使用道具 举报
学习学习
回复 使用道具 举报
谢谢答案,
回复 使用道具 举报
学习了,谢谢
回复 使用道具 举报
Mr7952 中级黑马 2015-4-19 11:14:10
8#
原来如此
回复 使用道具 举报
mono 中级黑马 2015-4-19 11:25:32
9#
学习一下、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马