PHP算法01
PHP算法01
PHP算法01
01). 羊生羊
一种羊, 第一年生一只小羊, 第四年生生一只小羊, 第五年死 20年后有多少只羊
1 2 3 4 5 6 7 8
| $arr = [1, 0, 0, 0, 0]; for ($i = 1; $i <= 20; $i++) { $tmp = $arr[1] + $arr[3]; array_unshift($arr, $tmp); array_pop($arr); } print_r($arr); echo array_sum($arr);
|
02). 猴子选大王
一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function monkey($n ,$m){ $arr = range(1,$n); $i = 0; while(count($arr)>1){ if(($i+1) % $m ==0) { unset($arr[$i]); } else { array_push($arr ,$arr[$i]); unset($arr[$i]); } $i++; } return $arr; }
print_r(monkey(10,4));
|
03). 10 进制; 8进制; 16进制 ; 2 进制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
echo 123; echo "<br>"; echo 100 * 1 + 10 * 2 + 1 * 3; echo "<br>";
echo 0123; echo "<br>"; echo 64 * 1 + 8 * 2 + 3; echo "<br>";
echo 027; echo "<br>"; echo 8 * 2 + 7; echo "<br>";
echo 0x123; echo "<br>"; echo 256 * 1 + 16 * 2 + 3; echo "<br>";
|
04). 8瓶水,其中1瓶有毒,那小白鼠做试验,药效发挥需要2小时
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
|
05). 递归
1 2 3 4 5 6 7 8 9
| function sum($n) { if ($n == 1) { return 1; } return $n + sum($n-1); }
echo sum(100);
|
06). PHP实现斐波那契数列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 1 1 2 3 5 8 13 21 34 55 .........
function fbnq($n){ if($n <= 0) return 0; if($n == 1 || $n == 2) return 1; return fbnq($n - 1) + fbnq($n - 2); } echo fbnq(10);
$arr = [1,1]; for ($i=2; $i < 30; $i++) { $arr[$i]=$arr[$i-1]+$arr[$i-2]; } var_dump($arr);
|
07). 静态变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
function t() { static $a = 5; $a += 1; return $a; }
echo t(); echo t(); echo t();
|
08). 递归练习,计算所有单元的和
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $arr = [1, 2, 3, [4, [5, 6]]];
function sum($arr) { static $sum = 0; foreach ($arr as $value) { if (is_array($value)) { sum($value); } else { $sum += $value; } } return $sum; }
echo sum($arr);
|
09). 递归练习 一个多维数组,如果单元值为数字,则把其值修改为原来2倍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
$arr = [1, 2, 'b', [3, 'c', [5, 6]]]; function double($arr) { foreach ($arr as $key=>$value) { if (is_array($value)) { $arr[$key] = double($arr[$key]); } else { if (is_numeric($value)) { $arr[$key] *= 2; } } } return $arr; } echo "<pre>"; print_r( double($arr));
$crr = [1, 2, 'b', [3, 'c', [5, 6]]];; function double_2(&$crr,$key) { if (is_numeric($crr)) { $crr*=2; } }
array_walk_recursive($crr, 'double_2'); echo "<pre>"; print_r($crr);
|
10). 递归创建目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $filepath = "./test/upload/2018/test.txt";
mk_dir($filepath);
function mk_dir($dir, $mode = 0755) { if (is_dir($dir) || @mkdir($dir,$mode)) return true; if (!mk_dir(dirname($dir),$mode)) return false; return @mkdir($dir,$mode); }
$filepath = "./test/upload/2018/test.txt"; mkdir($filepath, 0755, true);
|