Java解決猴子分桃算法解決方案以及拓展猴子算法自定義解決方案

/*
原問題
猴子分桃:海灘上有一堆桃子,有五隻猴子來分。
第一隻猴子把這堆桃子平分爲五份,多了一個,這隻猴子把多的一個扔入海中,拿走了一份。
第二隻猴子把剩下的桃子又平分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,
第三、第四、第五隻猴子都是這樣做的,
問:
海灘上原來最少有多少個桃子

拓展問題
猴子分桃:海灘上有一堆桃子,有N只猴子來分。
第一隻猴子把這堆桃子平分爲N份,多了K個,這隻猴子把多的一個扔入海中,拿走了一份。
第二隻猴子把剩下的桃子又平分成N份,又多了K個,它同樣把多的K個扔入海中,拿走了一份,
  一直到最後一隻猴子也是這麼做
問:
海灘上原來最少有多少個桃子
第一個傳統問題首先最後剩下最小應該是6個,以6爲最開始的基地進行逆序遞歸求出最小桃子數當不滿足條件的時候直接讓桃子數加5
拓展問題解決方案剩下最小應該是N+K個,以此進行逆序遞歸求最小桃子數當不滿足條件的時候直接讓桃子數加N

*/   



public static class Get{
  //傳統猴子分桃
  public static int get(int times ,int sum ,int lastSum){
   //0則返回
   if (times == 0) {
    return sum;
   }else if (times == 5) {
    //重新開始計算判斷是否要重置數據
    if ((sum-1)%5==0&&sum>=6) {
     return get(times-1, sum, (sum-1)/5*4);
    }else {
     return get(5, 6, 0);
    }
   }else {
    //計算是否滿足這一次分桃
    if ((lastSum-1)%5==0&&lastSum>6) {
     return get(times-1, sum, (lastSum-1)/5*4);
    }else return get(5,sum+5,0);
   }
  }
  //自定義猴子分桃包括猴子數量以及每一次遺留下相同的桃子數量
  public static int get(int monkeys,int loseSimpleNum){
   int minNum = monkeys+loseSimpleNum;
   return getDiy(monkeys, minNum, 0, loseSimpleNum, monkeys);
  }
  
  public static int getDiy(int times ,int sum ,int lastNum,int loseSimpleNum,int monkeys) {
   int minNum = monkeys+loseSimpleNum;
   int nextmonkeys = monkeys-1;
  /* System.out.println(times+"sum:"+sum+"\nlastNum:"+lastNum);*/
   //0則返回
   if (times == 0) {
    return sum;
   }else if (times == monkeys) {
    //重新開始計算判斷是否要重置數據
    if ((sum-loseSimpleNum)%monkeys==0&&sum>=minNum) {
     //System.out.println("replare");
     return getDiy(times-1, sum, (sum-loseSimpleNum)/monkeys*nextmonkeys,loseSimpleNum,monkeys);
    }else {
     //System.out.println("replare222");
     return getDiy(times, minNum, 0,loseSimpleNum,monkeys);
    }
   }else {
    //計算是否滿足這一次分桃
    if ((lastNum-loseSimpleNum)%monkeys==0&&lastNum>minNum) {
     //System.out.println("nest");
     return getDiy(times-1, sum, (lastNum-loseSimpleNum)/monkeys*nextmonkeys,loseSimpleNum,monkeys);
    }else return getDiy(monkeys, sum+monkeys, 0,loseSimpleNum,monkeys);
   }
  }
 }
發佈了65 篇原創文章 · 獲贊 126 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章