最近时间有些充裕,利用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 )
- ?> (fblww-0313)