黑马程序员技术交流社区

标题: 分享自己写的关于报数退出的java解决方法 [打印本页]

作者: chslzj    时间: 2013-7-15 22:48
标题: 分享自己写的关于报数退出的java解决方法
本帖最后由 chslzj 于 2013-7-15 23:10 编辑

忘记放在代码块里面了
  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Queue;

  5. /**
  6. *  有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。最后得到最后剩下的是100人中的那个人
  7. * @author Administrator
  8. *
  9. */
  10. public class Test10 {
  11.         //这里设置报到退出的数字
  12.         private static Integer number=14;
  13.         private static  List<Integer> list1=new ArrayList<Integer>();
  14.         public static void main(String[] args) {
  15.         List<Integer> list=new ArrayList<Integer>();
  16.         //初始化队列
  17.         //这里是100人,可以改其他数字,例如80人,就改成i<=80
  18.         for(int i=1;i<=100;i++)
  19.                 list.add(i);
  20.         //第二个参数是第几个人开始报数字,最后一个参数是已经有几个人退出,开始调用写0.
  21.         System.out.println("第"+findTheNumber(list,0,0)+"号留到了最后");
  22.         }
  23.         //使用递归算法
  24.         public static Integer findTheNumber(List<Integer> list,int begin,int index){
  25.                 for(int i=1;i<=number;i++)
  26.                         System.out.println("第"+list.get((begin+i-1)%list.size())+"号喊道"+i);
  27.                 int out=(begin+number-1)%list.size();
  28.                 list1.add(list.get(out));
  29.                 //将喊14的清除
  30.                 System.out.println("第"+list.remove(out)+"号喊道"+number+",退出");
  31.                 System.out.println("共有"+(++index)+"退出");
  32.                 //列出已经退出的人
  33.                 myToString(list1);
  34.                 //防止out是最后一个,清除后越界,所以使用out%list.size()
  35.                 System.out.println("下面从第"+list.get(out%list.size())+"号开始");
  36.                 if(list.size()!=1)
  37.                         //递归调用
  38.                         findTheNumber(list, out%list.size(),index);
  39.                 return list.get(0);
  40.         }
  41.         public static void myToString(List<Integer> list)
  42.         {
  43.                 StringBuffer stringBuffer=new StringBuffer();
  44.                 stringBuffer.append("{");
  45.                 for(Integer i:list)
  46.                         stringBuffer.append(i+",");
  47.                 stringBuffer.deleteCharAt(stringBuffer.length()-1);
  48.                 stringBuffer.append("}");
  49.                                 System.out.println(stringBuffer.toString());
  50.         }
  51. }
复制代码

作者: 许庭洲    时间: 2013-7-18 06:16
值得学习ing!




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