您的位置:首页 > 其它

打印一个杨辉三角

2011-07-20 22:59 211 查看
打印一个杨辉三角

<?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";
}
?>


本文出自 “一方有” 博客,请务必保留此出处http://yifangyou.blog.51cto.com/900206/618825
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: