打印一个杨辉三角
- <?php
- /*
- *3:打印一个杨辉三角
- 1
- 1 1
- 1 2 1
- 1 3 3 1
- 1 4 6 4 1
- 1 5 10 10 5 1
- *系统环境:windows/linux
- *编译环境:php4/php5
- *输入参数:存放在in.txt,多个参数时空格分隔
- 参数1,打印的层数,整数
- 输出:out.txt
- */
- $params=getParams(1);
- $argv0=trim($params[0]);
- //检查参数1
- if(!is_numeric($argv0))
- {
- error_msg("params 1 must be a numbers");
- }
- //输出结果
- //output("'$argv1' index is:".$item_index);
- //输出数字宽度
- $spaceNumber=6;
- $maxn=$argv0;
- //清空输出文件
- output("",true);
- get_trangle($argv0);
- error_msg("execute success");
- /*
- 递归打印杨辉三角各层数据
- 0层 1
- 1层 1
- 2层 1 1
- n层时: $n层[0]=$n-1层[0],$n层[1]=$n-1层[0]+$n-1层[1],$n层[2]=$n-1层[1]+$n-1层[2]
- */
- function get_trangle($n){
- if($n <= 0)
- {
- //递归结束
- return false;
- }
- if($n==1)
- {
- $this_level=array(1);
- print_line($this_level,$n);
- return array(1);
- }
- if($n==2)
- {
- $this_level=array(1,1);
- print_line(array(1),1);
- print_line($this_level,$n);
- return $this_level;
- }
- $last_level=get_trangle($n-1);
- if(!is_array($last_level)||count($last_level) < 2)
- {
- //递归结束
- return false;
- }
- $this_level=array();
- $this_level[0]=1;
- //$n层[1]=$n-1层[0]+$n-1层[1]
- for($i=0;$i< count($last_level)-1;$i++)
- {
- $this_level[$i+1]=$last_level[$i]+$last_level[$i+1];
- }
- $this_level[]=1;
- print_line($this_level,$n);
- return $this_level;
- }
- function print_line($aArray,$n)
- {
- global $maxn,$spaceNumber;
- $line=sprintf("%".(($maxn-$n)*$spaceNumber/2)."s","");
- foreach($aArray as $i)
- {
- $line.=sprintf("%".$spaceNumber."s",$i);
- }
- output($line);
- }
- /*
- 从in.txt里读取参数
- */
- function getParams($paramNum)
- {
- $in=file_get_contents("in.txt");
- if($in===FALSE){
- error_msg("cannot read in.txt,please check in.txt exists\n");
- }
- $in=preg_replace("/(\s+)/i", " ", $in);
- //多个参数时,按照空格分隔
- $parms=split(" ",trim($in));
- if($parms===FALSE)
- {
- error_msg("cannot get param from in.txt\n");
- }
- if(count($parms) < $paramNum)
- {
- error_msg("it needs $paramNum params\n");
- }
- return $parms;
- }
- /*
- 把结果输出到输出文件里
- 当isClean=true时清空out.txt
- */
- function output($msg,$isClean=false)
- {
- if($isClean)
- {
- $handle = fopen('out.txt', 'w');
- fclose($handle);
- }
- error_log($msg."\n", 3, "out.txt");
- }
- /*
- 输入错误信息
- 如果$is_exit表示输入信息后退出
- */
- function error_msg($msg,$is_exit=true)
- {
- if($is_exit)
- die($msg."\n");
- else
- echo $msg."\n";
- }
- ?>