首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 迴圈實作金字塔圖形:空心與實心兩種演算法

     編輯:PHP 綜合知識

利用巢狀迴圈列印金字塔是經典邏輯訓練。本文提供空心金字塔(僅邊框)與實心金字塔兩種演算法完整實作,並解析迴圈變數控制邏輯。

一、需求:空心金字塔(5 層)

    *
   * *
  *   *
 *     *
* * * * *

二、演算法一:Switch 硬編碼(教學示範)

<?php
for ($i = 1; $i <= 5; $i++) {
    switch ($i) {
        case 1: echo "  *  "; break;
        case 2: echo " * * "; break;
        case 3: echo "*   *"; break;
        case 4: echo "*     *"; break;
        case 5: echo "* * * * * "; break;
    }
    echo "
"; } ?>

缺點: 不具通用性,層數變更需重寫所有 case。

三、演算法二:通用迴圈邏輯(推薦)

核心觀察

  • 第 $i 行(1-indexed):前導空格 n - i,內容寬度 2*i - 1
  • 空心:首尾為 *,中間為空格
  • 實心:全為 *

空心金字塔

<?php
function printHollowPyramid($rows) {
    for ($i = 1; $i <= $rows; $i++) {
        // 1. 前導空格
        for ($s = 1; $s <= $rows - $i; $s++) {
            echo " "; // HTML 空格
        }
        
        // 2. 星號與內部空格
        for ($j = 1; $j <= 2 * $i - 1; $j++) {
            if ($j == 1 || $j == 2 * $i - 1 || $i == $rows) {
                echo "*";
            } else {
                echo "  "; // 內部空隙
            }
        }
        echo "
"; } } printHollowPyramid(5); ?>

實心金字塔

<?php
function printSolidPyramid($rows) {
    for ($i = 1; $i <= $rows; $i++) {
        // 前導空格
        for ($s = 1; $s <= $rows - $i; $s++) {
            echo " ";
        }
        // 全星號
        for ($j = 1; $j <= 2 * $i - 1; $j++) {
            echo "*";
        }
        echo "
"; } } printSolidPyramid(5); /* 輸出: * *** ***** ******* ********* */ ?>

四、變數控制表(以 5 層為例)

行號 $i前導空格 $rows-$i星號數 2*$i-1空心判斷
141首尾同位置 → *
233位置 1,3 → *;位置 2 → 空格
325位置 1,5 → *;位置 2-4 → 空格
417位置 1,7 → *;位置 2-6 → 空格
509底行全 *

五、進階:鑽石形狀(上下對稱)

<?php
function printDiamond($rows) {
    // 上半部(含中線)
    for ($i = 1; $i <= $rows; $i++) {
        for ($s = 1; $s <= $rows - $i; $s++) echo " ";
        for ($j = 1; $j <= 2 * $i - 1; $j++) echo "*";
        echo "
"; } // 下半部 for ($i = $rows - 1; $i >= 1; $i--) { for ($s = 1; $s <= $rows - $i; $s++) echo " "; for ($j = 1; $j <= 2 * $i - 1; $j++) echo "*"; echo "
"; } } printDiamond(5); /* * *** ***** ******* ********* ******* ***** *** * */ ?>

六、HTML 輸出注意事項

  • 瀏覽器合併連續空格,需用   或 `
    ` 標籤包裹
  •  保留原始格式,適合終端機風格輸出
<?php
echo "
";
printHollowPyramid(10);
echo "
"; ?>

七、演算法複雜度

  • 時間:O(n²) — 雙重迴圈,n 為行數
  • 空間:O(1) — 僅使用常數額外變數
  • 優化:字串重複 str_repeat('*', $count) 可減少內層迴圈
<?php
// str_repeat 優化版
function printSolidPyramidFast($rows) {
    for ($i = 1; $i <= $rows; $i++) {
        echo str_repeat(" ", $rows - $i);
        echo str_repeat("*", 2 * $i - 1);
        echo "
"; } } ?>

金字塔列印雖簡單,但完美鍛鍊了「行號與內容寬度的數學關係」、「邊界條件判斷」、「字串輸出控制」三大核心程式設計能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved