最近时间有些充裕,利用PHP实现了几个有意思的东东,拿来分享一下:
<?php /** * php画个菱形 * * 思路:多少行for一次,然后在里面空格和标记符号for一次。 * * @author flyer0126 * @date 2011-12-09 * */ //上半部分 for ($i=0; $i<10; $i++){ for ($j=0; $j<9-$i; $j++){ echo " "; } for ($k=0; $k<(2*$i+1); $k++){ echo "`"; } echo "<br/>"; } //下半部分 for ($i=1; $i<10; $i++){ for ($j=0; $j<$i; $j++){ echo " "; } for ($k=(18-2*$i+1); $k>0; $k--){ echo "`"; } echo "<br/>"; } /** * PHP实现杨辉三角 * * 思路:每一行的第一位和最后一位是1,没有变化,中间是前排一位与左边一排的和,这种算法是用一个二维数组保存,一行一行的输出。 * 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 * * @author flyer0126 * @date 2011-12-09 * */ //变量初始化 $arr = array(); //设置固定值1 for ($i=0; $i<6; $i++){ $arr[$i][0] = 1; $arr[$i][$i] = 1; } //计算中间值 for ($i=2; $i<6; $i++){ for ($j=1; $j<$i; $j++){ $arr[$i][$j] = $arr[$i-1][$j-1] + $arr[$i-1][$j]; } } //排列输出展示 for ($i=0; $i<count($arr); $i++){ for ($j=0; $j<count($arr[$i]); $j++){ echo $arr[$i][$j]." "; } echo "<br/>"; } /** * 在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。 * * 思路:找到比要插入数大的那个位置,替换,然后把后面的数后移一位。 * * @author flyer0126 * @date 2011-12-08 * */ //初始化数组变量(升序) $arr = array(1, 3, 5, 7, 9); //插入6 for ($i=0; $i<count($arr); $i++){ if($arr[$i] < 6 && 6 < $arr[$i+1]){ $tmp1 = $arr[$i+1]; $k = count($arr)+1; $arr[$i+1] = 6; for ($j=$i+2; $j<$k; $j++){ ($k > $j+1) ? $tmp2 = $arr[$j] : ''; $arr[$j] = $tmp1; $tmp1 = $tmp2; } break; } } //输出 print_r($arr); //Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 6 [4] => 7 [5] => 9 ) ?>