<?php /* 10:五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。 不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后, 发现还多一个,它吃掉这桃子,并拿走了其中一堆。第二只猴子醒来, 又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。 第三只,第四只,第五只猴子都依次如此分食桃子。那么桃子数最少应该有几个呢? */ /** * $n 是猴子数量 * $total 桃子数量 * $min 桃子最小数量 */ /** * 方法一 */ // 假设桃子最小数量为1 $min=1; $n=5; // 死循环 while (true) { $m = $min; for ($i=0; $i < $n; $i++) { if( ($m-1)%5==0) { $m=($m-1)/5*4; }else{ break; } } if($i==$n && $m>0) { break; } $min++; } echo $min; die; /** * 方法二 */ $n=7; // 如果空值的情况,可能桃子最小数量已经超过桃子总数量 $total = 9999999; $min = setFor($n,$total); echo $min; // 循环桃子 function setFor($n,$total) { // 假设最少就6个桃子 for ($i=6; $i < $total ; $i++) { if ( $minTaozi = getTaozi($n,$i)) { break; } } return $minTaozi; } // 获取桃子最小值 function getTaozi($n,$i) { if($n==0) { return $i; } $taozi = getTaozi($n-1,$i); if($taozi==false) { return false; } if($taozi%4 != 0 ) { return false; } return $taozi*5/4+1; }