php算法

猴子摘桃的算法

有一隻猴子摘了一堆桃子,當即吃了一半,可是桃子太好吃了,它又多吃了一個,第二天它把第一天剩下的桃子吃了一半,又多吃了一個,就這樣到第十天早上它只剩下一個桃子了,問它一共摘了多少個桃子?

 	    $a=1;
        for($i=10;$i>1;$i--){
            $a=($a+1)*2;
        }
        return $a;

實現猴子選大王問題算法實例

n只猴子圍坐成一個圈,按順時針方向從1到n編號。
然後從1號猴子開始沿順時針方向從1開始報數,報到m的猴子出局,再從剛出局猴子的下一個位置重新開始報數,
如此重複,直至剩下一個猴子,它就是大王。

設計並編寫程序,實現如下功能:
(1) 要求由用戶輸入開始時的猴子數nn、報數的最後一個數m。
(2) 給出當選猴王的初始編號。

function Monkey($n,$m) { 
  $r=0; 
  for($i=2; $i<=$n; $i++) {

      $r=($r+$m)%$i; 
  }
  return $r+1; 
} 
print_r(Monkey(3,3));

冒泡排序,C裏基礎算法,從小到大對一組數排序。

$arr = array(1,3,5,32,756,2,6);
$len = count($arr);
for ($i=0;$i<$len-1;$i++){
  for ($j=$i+1;$j<$len;$j++){
    if($arr[$i]>$arr[$j]){//從小到大 反之從大到小
      $p = $arr[$i];
      $arr[$i] = $arr[$j];
      $arr[$j]= $p;
    }
  }
}
var_dump($arr);

楊輝三角

每一行的第一位和最後一位是1,沒有變化,中間是前排一位與左邊一排的和,這種算法是用一個二維數組保存,另外有種算法用一維數組也可以實現,一行 一行的輸出

      $n  = 7;
        //每行的第一個和最後一個都爲1,寫了n行
        for($i=0; $i<$n; $i++) {
            $a[$i][0]=1;
            $a[$i][$i]=1;
        }
        //出除了第一位和最後一位的值,保存在數組中
        for($i=2; $i<$n; $i++) {
            for($j=1; $j<$i; $j++) {
                $a[$i][$j] = $a[$i-1][$j-1]+$a[$i-1][$j];
            }
        }
        //打印
        for($i=0; $i<$n; $i++){
            for($j=0; $j<=$i; $j++) {
                echo $a[$i][$j].' ';
            }
            echo '<br/>';
        }

在一組數中,要求插入一個數,按其原來順序插入,維護原來排序方式。

思路:找到比要插入數大的那個位置,替換,然後把後面的數後移一位。

        $in = 69;
        $arr = array(1,1,1,3,5,7);
        $n = count($arr);
        $is= false;  //是否比較
        $clone =  $arr;
        for ($i=0; $i<$n; $i++){
            $temp = $clone[$i];
            if ($arr[$i] >= $in && $is == false) {
                $arr[$i] = $in;
                $is =true;
            }
            if ($is){
                $arr[$i+1]=$temp;
            }
            if ($arr[$i]<$in && $i ==$n-1){
                $arr[$i+1]=$in;
            }
        }
        var_dump($arr);

牛年求牛:有一母牛,到4歲可生育,每年一頭,所生均是一樣的母牛,到15歲絕育,不再能生,20歲死亡,問n年後有多少頭牛。

        function t($n)
        {
            static $num = 1;
            for ($j = 1; $j <= $n; $j++) {
                if ($j >= 4 && $j < 15) {
                    $num++;
                    t($n-$j);
                }
                if ($j == 20) {
                    $num--;
                }
            }
            return $num;
        }
        echo t(20);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章