打印一个杨辉三角

打印一个杨辉三角

 
 
  1. <?php  
  2. /*  
  3. *3:打印一个杨辉三角  
  4. 1  
  5. 1  1  
  6. 1  2  1  
  7. 1  3  3  1  
  8. 1  4  6  4  1  
  9. 1  5  10 10  5  1  
  10.  
  11. *系统环境:windows/linux  
  12. *编译环境:php4/php5  
  13. *输入参数:存放在in.txt,多个参数时空格分隔  
  14.                     参数1,打印的层数,整数  
  15.     输出:out.txt  
  16. */ 
  17.  
  18. $params=getParams(1);  
  19. $argv0=trim($params[0]);  
  20. //检查参数1  
  21. if(!is_numeric($argv0))  
  22. {  
  23.     error_msg("params 1 must be a numbers");  
  24. }  
  25. //输出结果  
  26. //output("'$argv1' index is:".$item_index);  
  27. //输出数字宽度  
  28. $spaceNumber=6;  
  29. $maxn=$argv0;  
  30. //清空输出文件  
  31. output("",true);  
  32. get_trangle($argv0);  
  33. error_msg("execute success");  
  34.  
  35.  
  36. /*  
  37. 递归打印杨辉三角各层数据  
  38. 0层 1  
  39. 1层 1  
  40. 2层 1 1  
  41. n层时:  $n层[0]=$n-1层[0],$n层[1]=$n-1层[0]+$n-1层[1],$n层[2]=$n-1层[1]+$n-1层[2]  
  42. */ 
  43. function get_trangle($n){  
  44.     if($n <= 0)  
  45.     {  
  46.         //递归结束  
  47.         return false;  
  48.     }  
  49.     if($n==1)  
  50.     {  
  51.             $this_level=array(1);  
  52.             print_line($this_level,$n);  
  53.             return array(1);  
  54.     }  
  55.     if($n==2)  
  56.     {  
  57.             $this_level=array(1,1);  
  58.             print_line(array(1),1);  
  59.             print_line($this_level,$n);  
  60.             return $this_level;  
  61.     }  
  62.     $last_level=get_trangle($n-1);  
  63.     if(!is_array($last_level)||count($last_level) < 2)  
  64.     {  
  65.         //递归结束  
  66.         return false;  
  67.     }  
  68.     $this_level=array();  
  69.     $this_level[0]=1;  
  70.     //$n层[1]=$n-1层[0]+$n-1层[1]  
  71.     for($i=0;$icount($last_level)-1;$i++)  
  72.     {  
  73.         $this_level[$i+1]=$last_level[$i]+$last_level[$i+1];  
  74.     }  
  75.     $this_level[]=1;  
  76.     print_line($this_level,$n);  
  77.     return $this_level;  
  78. }  
  79.  
  80. function print_line($aArray,$n)  
  81. {  
  82.     global $maxn,$spaceNumber;  
  83.     $line=sprintf("%".(($maxn-$n)*$spaceNumber/2)."s","");    
  84.     foreach($aArray as $i)   
  85.     {  
  86.         $line.=sprintf("%".$spaceNumber."s",$i);  
  87.     }  
  88.     output($line);  
  89. }  
  90.  
  91. /*  
  92.     从in.txt里读取参数  
  93.       
  94. */ 
  95. function getParams($paramNum)  
  96. {  
  97.     $in=file_get_contents("in.txt");  
  98.     if($in===FALSE){  
  99.         error_msg("cannot read in.txt,please check in.txt exists\n");     
  100.     }  
  101.     $in=preg_replace("/(\s+)/i"" "$in);  
  102.     //多个参数时,按照空格分隔  
  103.     $parms=split(" ",trim($in));  
  104.     if($parms===FALSE)  
  105.     {  
  106.         error_msg("cannot get param from in.txt\n");  
  107.     }  
  108.     if(count($parms) < $paramNum)  
  109.     {  
  110.         error_msg("it needs $paramNum params\n");  
  111.     }  
  112.     return $parms;  
  113. }  
  114.  
  115. /*  
  116.     把结果输出到输出文件里  
  117.     当isClean=true时清空out.txt  
  118. */ 
  119. function output($msg,$isClean=false)  
  120. {  
  121.     if($isClean)  
  122.     {  
  123.     $handle = fopen('out.txt''w');  
  124.     fclose($handle);      
  125.     }  
  126.     error_log($msg."\n", 3, "out.txt");  
  127. }  
  128. /*  
  129.     输入错误信息  
  130.     如果$is_exit表示输入信息后退出  
  131. */ 
  132. function error_msg($msg,$is_exit=true)  
  133. {  
  134.     if($is_exit)  
  135.         die($msg."\n");  
  136.     else 
  137.         echo $msg."\n";  
  138. }  
  139. ?> 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值