题目:m只猴子围成一圈报数,报n的猴子自动离开,然后下一位重新从1开始报数,一直循环,最后剩下的那个猴子就是猴大王,写出程序求出最后是大王的那只猴子最初的位置。

  package learn;

  import java.util.ArrayList;

  public class Main {
      public static void main(String[] args) {
        //创建一个list集合,用来存放猴子对象(为方便推演,暂定猴子总数m为6,每次数到数n为3)
          ArrayList<String> list = new ArrayList<String>();
          for (int i=0 ;i<6;i++) {
              list.add("monkey"+i);
          }
         //猴子总数,m
          int total = 6;
          //每次数到的目标数,n
          int target = 3;
          //数组下表
          int index = 0;
          //计数器
          int count = 0;
          //剩余猴子的数量,初始值等于total
          int remiander = total;
          //进行判断,只要剩余数量大于1,就一直执行
          while(remiander>1){
              /*如果数字下标等于剩余数量,说明已经遍历至数组结尾,需将数组下标重置为0
              相当于猴子站成一排,到最后一只报完数后,剩下的第一只跟着继续报数,跟围城一圈效果一样*/
              if(index==remiander){
                  index=0;
              }
              //如果该下标对应有值,说明应计数一次
              if( list.get(index)!= null){
                  //计数标志加1
                  count++;
                  //如果继续标志与目标数相等
                  if(count==target){
                      //移除对应位置的数据
                      list.remove(index);
                      //剩余数量减一
                      remiander--;
                      //将计数器重置为0
                      count=0;
                      //开始下一次循环
                      continue;
                  }
              }
              //每次校验完毕后,执行至此处,下标加1
              index++;
          }
          //打印输出最后剩下的猴子信息
          for (String monkey : list) {
              System.out.println(monkey);
          }
      }
  }

  运行结果:m=6,n=3,结果为monkey0;

       m=8,  n=5,结果为monkey2;

       m=10,n=4,结果为monkey4;

       

  

最新文章

  1. sqlite中的自增主键
  2. python中调用C++写的动态库
  3. 调用函数的ALV、面向对象的ALV设置带选择列
  4. hdu_5788_Level Up(树状数组+主席树)
  5. The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new View.OnClickListener(){}, String, int)
  6. PHP常见面试题总结
  7. 转 Caffe学习系列(2):数据层及参数
  8. Python内置函数(19)——oct
  9. C#のsocket通信
  10. java多线程之守护线程(Daemon)
  11. Kafka实战-Storm Cluster
  12. html 转化成 pdf
  13. SerialPort类的用法与示例
  14. mysql 索引原理及查询优化 -转载
  15. 56. Merge Intervals (Array; Sort)
  16. Linux命令学习与使用2
  17. 洛谷 P3235 [HNOI2014]江南乐 解题报告
  18. 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境【转】
  19. 【眼见为实】自己动手实践理解数据库REPEATABLE READ &amp;&amp; Next-Key Lock
  20. bzoj1116 [POI2008]CLO 边双联通分量

热门文章

  1. iOS Programming Recipe 6: Creating a custom UIView using a Nib
  2. FileInputStream和FileOutStream的使用——文件字节输入/输出流
  3. iTerm2 + Oh My Zsh 打造舒适终端体验
  4. [原创] 改善 Firemonkey Canvas 几何绘图质量问题(移动平台)
  5. MVC4 Model ValueProvider
  6. java中介者模式
  7. TSQL--SORT MERGE JOIN
  8. Spring学习(一)&mdash;&mdash;环境准备
  9. 使用.net core 自带DI框架实现 延迟加载
  10. Windows上传文件到linux 使用winscp