10:五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。
不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,
发现还多一个,它吃掉这桃子,并拿走了其中一堆。第二只猴子醒来,
又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。
第三只,第四只,第五只猴子都依次如此分食桃子。那么桃子数最少应该有几个呢?
- <?php
- /*
- 10:五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。
- 不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,
- 发现还多一个,它吃掉这桃子,并拿走了其中一堆。第二只猴子醒来,
- 又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。
- 第三只,第四只,第五只猴子都依次如此分食桃子。那么桃子数最少应该有几个呢?
- 设总数为x 第0个猴子偷掉后剩下的总数
- (x-1)4/5=H1 第1个猴子偷掉后剩下的总数
- (H1-1)4/5=H2 第2个猴子偷掉后剩下的总数
- (H2-1)4/5=H3 第3个猴子偷掉后剩下的总数
- (H3-1)4/5=H4 第4个猴子偷掉后剩下的总数
- (H4-1)4/5=H5 第5个猴子偷掉后剩下的总数 最后一个猴子最少把桃子分为 5堆每堆一个,还剩一个
- 剩下y=H5
- *系统环境:windows/linux
- *编译环境:php4/php5
- *输入参数:无
- 输出:out.txt
- */
- /*
- 每次猴子偷吃桃子时,桃子总数为5x+1,那么它拿走了x+1,剩下4x,那 上一个猴子偷吃时的桃子总数比下一个猴子偷吃时多了x+1
- */
- for($i=6;$i < 10000;$i++)
- {
- if($minTaozi=getLeftTaozi(5,$i))
- {
- break;
- }
- }
- //输出结果
- output("min count Taozi:$minTaozi",true);
- error_msg("execute success");
- function getLeftTaozi($n,$min)
- {
- if($n==0)
- {
- return $min;
- }
- $left=getLeftTaozi($n-1,$min);
- if($left==false)
- {
- return false;
- }
- if($left % 4 != 0)
- {
- return false;
- }
- return $left*5/4+1;
- }
- /*
- 把结果输出到输出文件里
- 当isClean=true时清空out.txt
- */
- function output($msg,$isClean=false)
- {
- if($isClean)
- {
- $handle = fopen('out.txt', 'w');
- fclose($handle);
- }
- error_log($msg."\n", 3, "out.txt");
- }
- /*
- 输入错误信息
- 如果$is_exit表示输入信息后退出
- */
- function error_msg($msg,$is_exit=true)
- {
- if($is_exit)
- die($msg."\n");
- else
- echo $msg."\n";
- }
- ?>