打印金字塔模式

时间:2013-07-30 13:46:51

标签: php

        1 
      1 2 1 
    1 2 3 2 1 
      1 2 1 
        1 

$newline = "\r\n";
 $prnt = '*';
 $nos = 3;
 for($i = 1; $i <= 2; $i++)
 { 
    for($s = $nos; $s >= 1; $s--)
    {
        echo "&nbsp;";echo "&nbsp;";echo "&nbsp;";
    }
    for($j = 1; $j <= $i; $j++)
    {
        echo $j;echo "&nbsp;";
    }
    $m = 2; 
    for($k = 1; $k <= ($i - 1); $k++)
    {  
            echo $k;echo "&nbsp;";


    }  

    echo '<br />';
    $nos--;
    }
    $nos = 1;

    for($i = 3; $i >= 1; $i--)
    {
      for ($s = $nos; $s >= 1; $s--) {
       echo "&nbsp;";echo "&nbsp;";echo "&nbsp;";
    }
    for($j = 1; $j <= $i; $j++)
    {
        echo $j;echo "&nbsp;";
    }
    for($k = 1; $k <= ($i - 1); $k++)
    {
        echo $k;echo "&nbsp;";
    }
  $nos++;
  echo '<br />';//printf("\n");

 }

我得到了输出

        1 
      1 2 1 
    1 2 3 1 2 
      1 2 1 
        1 
  1. 我使用echo ' ';时无法打印空间,因此我使用echo "&nbsp;";但我不想使用echo "&nbsp;";来解决此问题。

  2. 我在创建上面的程序时遇到问题但是某个地方缺少一个值可能需要在那里应用一些条件。请参阅我的代码。

2 个答案:

答案 0 :(得分:2)

由于必须如何渲染,因此不允许以直接HTML格式打印多个空格。

如果您想要精确打印 - 包含空格 - 只需使用<pre/>标记打包您的代码。

<pre>Spacing    will be    literal.</pre>

您也可以使用white-space CSS属性进行格式设置,方法是将其设置为pre

.spaces {
    white-space: pre;
}

<div class="spaces">Spacing    will be    literal.</div>

答案 1 :(得分:0)

这是一个有趣的小算法。这是PHP中的递归解决方案。我把它包装在&lt; PRE&gt;标记,以便我可以使用空格和新行“\ n”。

<pre>
<?php
function printPyramid($height) {
    // initialize
    $size = ($height * 2) - 1;
    $half = $size / 2;
    $arr = Array();
    for($r = 0; $r < $size; $r++) {
        $arr[] = array();
        for($c = 0; $c < $size; $c++) {
            $arr[$r][] = "";
        }
    }
    $arr[$half][$half] = $height;
    // recursively build, pass array as reference "&"
    pyramidRec($arr, $half, $half, $size);
    // print
    for($r = 0; $r < $size; $r++) {
        for($c = 0; $c < $size; $c++) {
            if(empty($arr[$r][$c]))
                echo "  ";
            else if(strlen($arr[$r][$c]) == 1)
                echo "{$arr[$r][$c]} ";
            else
                echo $arr[$r][$c];
        }
        echo "\n";
    }    
}
function pyramidRec(&$arr, $r, $c, $size) {
    $val = $arr[$r][$c];
    $newVal = $val - 1;
    if($newVal == 0)
        return;
    // up
    if($r - 1 >= 0 && empty($arr[$r-1][$c])) {
        $arr[$r-1][$c] = $newVal;
        pyramidRec($arr, $r-1, $c, $size);
    }
    // down
    if($r + 1 < $size && empty($arr[$r+1][$c])) {
        $arr[$r+1][$c] = $newVal;
        pyramidRec($arr, $r+1, $c, $size);
    }  
    // left
    if($c - 1 >= 0 && empty($arr[$r][$c-1])) {
        $arr[$r][$c-1] = $newVal;
        pyramidRec($arr, $r, $c-1, $size);
    }
    // right
    if($c + 1 < $size && empty($arr[$r][$c+1])) {
        $arr[$r][$c+1] = $newVal;
        pyramidRec($arr, $r, $c+1, $size);
    }      
}

printPyramid(5);
?>
</pre>