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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章