java實現猴子選大王問題(約瑟夫問題)


題目: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;

       

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM