| 本帖最后由 chslzj 于 2013-7-15 23:10 编辑 
 忘记放在代码块里面了
 复制代码package com.itheima;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
/**
 *  有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。最后得到最后剩下的是100人中的那个人
 * @author Administrator
 *
 */
public class Test10 {
        //这里设置报到退出的数字
        private static Integer number=14;
        private static  List<Integer> list1=new ArrayList<Integer>();
        public static void main(String[] args) {
        List<Integer> list=new ArrayList<Integer>();
        //初始化队列
        //这里是100人,可以改其他数字,例如80人,就改成i<=80
        for(int i=1;i<=100;i++)
                list.add(i);
        //第二个参数是第几个人开始报数字,最后一个参数是已经有几个人退出,开始调用写0.
        System.out.println("第"+findTheNumber(list,0,0)+"号留到了最后");
        }
        //使用递归算法
        public static Integer findTheNumber(List<Integer> list,int begin,int index){
                for(int i=1;i<=number;i++)
                        System.out.println("第"+list.get((begin+i-1)%list.size())+"号喊道"+i);
                int out=(begin+number-1)%list.size();
                list1.add(list.get(out));
                //将喊14的清除
                System.out.println("第"+list.remove(out)+"号喊道"+number+",退出");
                System.out.println("共有"+(++index)+"退出");
                //列出已经退出的人
                myToString(list1);
                //防止out是最后一个,清除后越界,所以使用out%list.size()
                System.out.println("下面从第"+list.get(out%list.size())+"号开始");
                if(list.size()!=1)
                        //递归调用
                        findTheNumber(list, out%list.size(),index);
                return list.get(0);
        }
        public static void myToString(List<Integer> list)
        {
                StringBuffer stringBuffer=new StringBuffer();
                stringBuffer.append("{");
                for(Integer i:list)
                        stringBuffer.append(i+",");
                stringBuffer.deleteCharAt(stringBuffer.length()-1);
                stringBuffer.append("}");
                                System.out.println(stringBuffer.toString());
        }
}
 |