黑马程序员技术交流社区

标题: 算法题 [打印本页]

作者: 失乐缘    时间: 2019-10-10 15:13
标题: 算法题
public void 猴子报数(){
     //m只猴子围成一圈报数,报n的猴子自动离开,
     //然后下一位重新从1开始报数,一直循环,
     //最后剩下的那个猴子就是猴大王,
     //写出程序求出最后是大王的那只猴子最初的位置。
//m,n 需要设置
     //报数出局时 记录出局猴,在所有猴都报完一轮数后进行清算
     //然后继续

     List<Integer> list=new ArrayList();
      int m[]=new int[11]; //装填7只猴子   7可变
        for (int i=1;i<=m.length;i++){
            m[i-1]=i;
            list.add(m[i-1]);
        }
        int b=4;    //设置报数 报到3 gck  3可变

     List<Integer> cj=new ArrayList<>();

     int i=1;//报数从1开始
         while(true){
             for (Integer integer : list) { //遍历猴 猴报数
                 //System.out.println(integer+"号喊"+i);
                 i++;
                 if (i%(b+1)==0){  //代表有猴出局了
                     cj.add(integer); //记录出局的猴 记录元素
                  //  System.out.println(integer+"号出局");
                         i=1;// 出局代表需 重置报数到1
                 }
             }
                 //到此处代表一轮已过,到清算时间
                 for (int j = cj.size(); j>=1 ; j--) {//开始清算
                     list.remove(cj.get(j-1)); //清算的是元素 不是索引
                 }
                 //清空清算名单
                 cj.clear();

             System.out.println("一轮过后的list"+list);
               //  System.out.println("此时i="+i);

                 if (list.size()==1){ //当只剩最后一个时退出
                     break; }
        }
     System.out.println("猴王是:"+list.get(0)+"");
}





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