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