1. 兔子问题 (斐波那契数列,即 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ……)。 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,请编程输出两年内每个月的兔子总数为多少?
function _Fibonacci($n)
{
$one = 1;
$two = 1;
$count = 1;
if ($n < 3) {
return;
}
for ($i = 3; $i <= $n; $i++) {
$count = $one + $two;
$two = $one;
$one = $count;
echo "第" . $i . "个月的兔子数:" . $count . "<br>";
}
return $count;
}
_Fibonacci(24);
输出效果如下:
第3个月的兔子数:2
第4个月的兔子数:3
第5个月的兔子数:5
第6个月的兔子数:8
第7个月的兔子数:13
第8个月的兔子数:21
第9个月的兔子数:34
第10个月的兔子数:55
第11个月的兔子数:89
第12个月的兔子数:144
第13个月的兔子数:233
第14个月的兔子数:377
第15个月的兔子数:610
第16个月的兔子数:987
第17个月的兔子数:1597
第18个月的兔子数:2584
第19个月的兔子数:4181
第20个月的兔子数:6765
第21个月的兔子数:10946
第22个月的兔子数:17711
第23个月的兔子数:28657
第24个月的兔子数:46368
//递归法
function _Fibonacci($n)
{
if ($n == 1 || $n == 2) {
return 1;
} else {
return _Fibonacci($n - 1) + _Fibonacci($n - 2);
}
}
for ($i = 1; $i <= 24; $i++) {
echo "第" . $i . "个月的兔子数:" . (_Fibonacci($i)) . "<br>";
}
输出效果如下:
第1个月的兔子数:1
第2个月的兔子数:1
第3个月的兔子数:2
第4个月的兔子数:3
第5个月的兔子数:5
第6个月的兔子数:8
第7个月的兔子数:13
第8个月的兔子数:21
第9个月的兔子数:34
第10个月的兔子数:55
第11个月的兔子数:89
第12个月的兔子数:144
第13个月的兔子数:233
第14个月的兔子数:377
第15个月的兔子数:610
第16个月的兔子数:987
第17个月的兔子数:1597
第18个月的兔子数:2584
第19个月的兔子数:4181
第20个月的兔子数:6765
第21个月的兔子数:10946
第22个月的兔子数:17711
第23个月的兔子数:28657
第24个月的兔子数:46368
2. 打印杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
function _Triangle($n)
{
$arr = array();
for ($i = 1; $i <= $n; $i++) {
for ($j = 1; $j <= $i; $j++) {
if ($j == 1 || $j == $i) {
echo $arr[$i][$j] = 1;
} else {
echo $arr[$i][$j] = $arr[$i - 1][$j - 1] + $arr[$i - 1][$j];
}
echo " ";
}
echo "<br/>";
}
}
_Triangle(10);
3. 五种方法获取文件路径文件后缀名
$str = "/data/www/wordpress/wp-content/themes/twentyten/images/info.png";
// 字符串切割 strrchr返回从该位置到字符串结尾的所有字符
function get_ext1($str)
{
return substr(strrchr($str, "."), 1);
}
// 使用 pathinfo
function get_ext2($str)
{
$p = pathinfo($str);
return $p['extension'];
}
// 字符串切割 strrpos字符串在另一字符串中最后一次出现的位置
function get_ext3($str)
{
return substr($str, strrpos($str, '.') + 1);
}
// 使用 array_pop 出栈数组中的最后一个元素
function get_ext4($str)
{
$arr = explode('.', $str);
return array_pop($arr);
}
// 使用 pathinfo 及其常量
function get_ext5($str)
{
return pathinfo($str, PATHINFO_EXTENSION);
}
echo get_ext1($str) . PHP_EOL . "</br>";
echo get_ext2($str) . PHP_EOL . "</br>";
echo get_ext3($str) . PHP_EOL . "</br>";
echo get_ext4($str) . PHP_EOL . "</br>";
echo get_ext5($str) . PHP_EOL . "</br>";
4. 快速排序
function quick_sort($array)
{
if (count($array) <= 1) {
return $array;
}
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i = 1; $i < count($array); $i++) {
if ($array[$i] <= $key) {
$left_arr[] = $array[$i];
} else {
$right_arr[] = $array[$i];
}
}
//var_dump($left_arr, $right_arr);
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
$res = array_merge($left_arr, array($key), $right_arr);
//var_dump($res);
return $res;
}
$arr1 = [12, 123, 35, 65, 98, 6, 43, 21, 3, 77];
$res = quick_sort($arr1);
var_dump($res);
结果如下:
array (size=10)
0 => int 3
1 => int 6
2 => int 12
3 => int 21
4 => int 35
5 => int 43
6 => int 65
7 => int 77
8 => int 98
9 => int 123
5. 打印如下的字符图形
a a a
aa aa aa
aaa aaa aaa
……
$len = 5;
$str = "a";
for ($i = 1; $i <= $len; $i++) {
$str1 = '';
for ($k = 0; $k < $i; $k++) {
$str1 .= $str;
}
for ($j = 0; $j < 3; $j++) {
echo $str1 . " ";
}
echo "<br>";
}
6. 打印如下的字符图形
1
2 22
3 33 333
4 44 444 4444
5 55 555 5555 55555
……
$height = 8;
for ($i = 1; $i <= $height; $i++) {
$str = '';
for ($k = 0; $k < $i; $k++) {
$str .= $i;
echo $str . " ";
}
echo "<br>";
}
7. 打印如下图形
#
###
#####
#######
#########
#######
#####
###
#
$ii = 9;
for ($i = 1; $i <= $ii; $i++) {
if ((2 * $i - 1) > $ii) {
} else {
for ($j = 2 * ($ii - $i) - 1; $j > 0; $j--) {
echo " ";
}
for ($j = 0; $j < 2 * $i - 1; $j++) {
echo '#';
}
echo "<br>";
}
}
$k = floor($ii / 2);
for ($j = $k; $j > 0; $j--) {
for ($l = 2 * ($ii - $j) - 1; $l > 0; $l--) {
echo " ";
}
for ($kk = 2 * $j - 1; $kk > 0; $kk--) {
echo '#';
}
echo "<br>";
}
8. 两个数组交叉合并到一个新的数组,如:
$a = [1,2,3];
$b = [‘a’, ‘b’, ‘c’];
合并后 $c = [1, ‘a’, 2, ‘b’, 3, ‘c’]
$a = [1, 2, 3];
$b = ['a', 'b', 'c'];
$i = $j = 0;
$len = count($a) + count($b);
$arr = [];
for ($k = 0; $k < $len; $k++) {
if ($k % 2 == 0) {
array_push($arr, $a[$i]);
$i++;
} else {
array_push($arr, $b[$j]);
$j++;
}
}
var_dump($arr);