首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 打印菱形圖案:雙重迴圈幾何邏輯詳解

     編輯:關於C++

目標圖案

以 n=5 為例,輸出對稱菱形:

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

菱形示意圖

幾何規律分析

菱形可分為上半部(含中線)與下半部:

  • 第 i 行(1≤i≤n):前導空格 n-i,星號 2*i-1。
  • 第 i 行(1≤i≤n-1):前導空格 i,星號 2*(n-i)-1。

完整代碼


#include 
using namespace std;

int main() {
    int n = 5;  // 可改為 cin >> n 實現動態輸入

    // 上半部(含中線)
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n - i; ++j) cout << ' ';
        for (int k = 1; k <= 2 * i - 1; ++k) cout << '*';
        cout << '\n';
    }

    // 下半部
    for (int i = 1; i <= n - 1; ++i) {
        for (int j = 1; j <= i; ++j) cout << ' ';
        for (int k = 1; k <= 2 * (n - i) - 1; ++k) cout << '*';
        cout << '\n';
    }

    return 0;
}

變體擴展

1. 空心菱形


// 上半部
for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n - i; ++j) cout << ' ';
    for (int k = 1; k <= 2 * i - 1; ++k)
        cout << (k == 1 || k == 2 * i - 1 ? '*' : ' ');
    cout << '\n';
}
// 下半部類似,只在首尾印星號

2. 帶字符參數的通用函數


void printDiamond(int n, char fill = '*', char space = ' ') {
    auto line = [&](int spaces, int stars) {
        cout << string(spaces, space) << string(stars, fill) << '\n';
    };
    for (int i = 1; i <= n; ++i) line(n - i, 2 * i - 1);
    for (int i = 1; i < n; ++i) line(i, 2 * (n - i) - 1);
}

3. 遞迴實現


void diamondRec(int n, int i = 1) {
    if (i > 2 * n - 1) return;
    int stars = (i <= n) ? 2 * i - 1 : 2 * (2 * n - i) - 1;
    int spaces = (i <= n) ? n - i : i - n;
    cout << string(spaces, ' ') << string(stars, '*') << '\n';
    diamondRec(n, i + 1);
}

教學重點總結

  1. 分解幾何:將複雜圖案拆解為「空格數」與「星號數」兩個關於行號的線性函數。
  2. 邊界條件:上半部 n 行,下半部 n-1 行,避免中線重複。
  3. 通用化:提取參數(大小、填充字符、空白字符)提升複用性。
  4. 替代實現:std::string 建構子、遞迴、單迴圈數學映射(abs)均可實現,面試時展示多種思路加分。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved