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

來源:互聯網
上載者:User

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

拓展問題 猴子分桃:海灘上有一堆桃子,有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);
   }
  }
 }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.