几个PHP算法题

时间:2014-02-15所属栏目: PHP/PHP框架 来源: 未知 热度:

有5小我私人偷了一堆苹果,筹备在第二天禀赃。晚上,有一人遛出来,把全部菜果分成5份,可是多了一个,随手把这个扔给树上的猴了,本身先拿1/5藏了。没想到其他四人也都是这么想的,都如第一小我私人一样分成5份把多的那一个扔给了猴,偷走了1/5。第二天,各人分赃,也是分成5份多一个扔给猴了。最后一人分了一份。问:共有几多苹果?
PHP代码如下:

for ($i = 1; ; $i++)
{
    if ($i%5 == 1) {
        //第一小我私人取五分之一,还剩$t
        $t = $i - round($i/5) - 1;		
        if($t % 5 == 1)
        {
            //第二小我私人取五分之一,还剩$r
            $r = $t - round($t/5) - 1;		
            if($r % 5 == 1)
            {
                //第三小我私人取五分之一,还剩$s
                $s = $r - round($r/5) - 1;				
                if($s % 5 == 1)
                {
                    //第四小我私人取五分之一,还剩$x
                    $x = $s - round($s/5) - 1;					
                    if($x % 5 == 1)
                    {
                        //第五小我私人取五分之一,还剩$y
                        $y = $x - round($x/5) - 1;						
                        if ($y % 5 == 1) {
                            echo $i;
                            break;
                        }
                    }
                }
            }
        }
    }
}

一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后头再开始数,再数到第m只,在把它踢出去…,云云不断的举办下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模仿此进程,输入m、n, 输出最后谁人大王的编号。

function king($n, $m){
    $monkeys = range(1, $n);
    $i=0;
    $k=$n;
    while (count($monkeys)>1) {
        if(($i+1)%$m==0) {
            unset($monkeys[$i]);
        } else {
            array_push($monkeys,$monkeys[$i]);
            unset($monkeys[$i]);
        }
        $i++;
    }
    return current($monkeys);
}

$a = king(5, 2);
var_dump($a);

汉诺塔(又称河内塔)题目是印度的一个迂腐的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,别的一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,划定可操作中间的一根棒作为辅佐,但每次只能搬一个,并且大的不能放在小的上面。解答功效请本身运行计较,措施见尾部。面临复杂的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精神也不行能完成金片的移动。
其后,这个传说就演变为汉诺塔游戏:
1.有三根杆子A,B,C。A杆上有多少碟子
2.每次移动一块碟子,小的只能叠在大的上面
3.把全部碟子从A杆所有移到C杆上
颠末研究发明,汉诺塔的破解很简朴,就是凭证移动法则向一个偏向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C
另外,汉诺塔题目也是措施计划中的经典递归题目。

function hanoi($n,$x,$y,$z){
    if($n==1){
        echo 'move disk 1 from '.$x.' to '.$z."\n";
    }else{
        hanoi($n-1,$x,$z,$y);
        echo 'move disk '.$n.' from '.$x.' to '.$z."\n";
        hanoi($n-1,$y,$x,$z);
    }     
}
hanoi(3,'A','B','C'); 
标签:php分苹果, php汉诺塔, php算法, php选猴王
标签:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)