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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 失乐缘 初级黑马   /  2019-10-10 15:13  /  899 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)+"");
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马