手记

php编程 - php分糖果问题

分糖果

10个小孩围成一圈。老师分个

1:10块糖

2:2块

3:8块

4:22块

5:16快

6:4块

7:10块

8:6块

9:14块

10:20块


然后所有的的小孩同时把手中的糖分一半给右边的小孩。糖块为奇数的可向

老师要一块。经过几次后手中的糖的块数一样多。每人各几块糖

<?php

header("Content-Type: text/html; charset=utf-8");

/*

分糖果

10个小孩围成一圈。老师分个

1:10块糖

2:2块

3:8块

4:22块

5:16快

6:4块

7:10块

8:6块

9:14块

10:20块

然后所有的的小孩同时把手中的糖分一半给右边的小孩。糖块为奇数的可向

老师要一块。经过几次后手中的糖的块数一样多。每人各几块糖

*/

/*

$i = array()来存每个小孩手中的糖

*/

?>

<?php

    $arr = array(10,2,8,22,16,4,10,6,14,20);//小孩手中的糖

    $times = 0;//分糖字数

       

    //如果小孩的手中糖一样就停止

    //就是判断相邻的2个小孩一样就 +1.如果+到10就说明相等

    function isSame($arr){

        $shu =0;

        $b = false;

        for($j=0;$j< (sizeof($arr)-1) ;$j++){

            if($arr[$j] == $arr[$j+1]){

                $shu ++;

            }

               

            if($shu == (sizeof($arr)-1)){

                $b =true;

            }else{

                $b = false;

            }

               

            //return $shu;

        }

           

        return $b;//判断是否相等。如果相等就返回1

    }

    $true = 0;//用来判断糖块是否一样默认是不一样

    //echo isSame($arr);

    while($true <1){

        $b =true;

        $m = $arr[9]; //第10个小孩手中的糖 主要是防止被覆盖

        //第一次分糖后小孩手中的糖的数量

        //第2位糖的数量 = 第一位的/2+自己的/2

        //第3位糖的数量 = 第2位/+自己的/2

        for($n =9;$n>0;$n--){

            $arr[$n] = $arr[$n-1]/2 + $arr[$n]/2;

        }

           

        $arr[0] = $m/2 + $arr[0]/2;

           

        $times++;

           

        for($j =0;$j<10;$j++){

            if($arr[$j] %2 != 0){

                $arr[$j] +=1;  //奇数就要一个糖

            }

        }

           

        echo '第'.$times.'次分糖后小孩手中的糖块';

        for($mm=0;$mm<sizeof($arr);$mm++){

            echo $arr[$mm].' ';

        }

        echo '<br />';

        //return $arr;

        if( isSame($arr) == 1 ) $true = 1;//判断一样的时候

        //echo $true;

           

    }

       

    echo '分糖分了'.$times.'次<br />';

    echo '每个小孩最后分到的糖是:'.$arr[0];

       

       

       

?>

0人推荐
随时随地看视频
慕课网APP