Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

C++ Program: Print Diamond Shape Pattern


พิมพ์รูป Diamond (เพชร) ด้วย Asterisk (*) โดยรับจำนวนแถว (Rows) ของครึ่งบน มาเป็นพารามิเตอร์

Logic

Diamond = Upper Pyramid + Lower Inverted Pyramid

  • Upper: Rows 1 to N, Spaces = N-i, Stars = 2i-1
  • Lower: Rows 1 to N-1, Spaces = i, Stars = 2(N-i)-1

โค้ด C++ (Clean & Readable)

#include <iostream>
using namespace std;

void printDiamond(int n) {
    if (n <= 0) return;
    
    // Upper half (including middle)
    for (int i = 1; i <= n; i++) {
        // Leading spaces
        for (int s = 0; s < n - i; s++) cout << ' ';
        // Stars
        for (int s = 0; s < 2 * i - 1; s++) cout << '*';
        cout << '\n';
    }
    
    // Lower half (excluding middle)
    for (int i = n - 1; i >= 1; i--) {
        for (int s = 0; s < n - i; s++) cout << ' ';
        for (int s = 0; s < 2 * i - 1; s++) cout << '*';
        cout << '\n';
    }
}

// Alternative: Single Loop with Math
void printDiamondSingleLoop(int n) {
    int totalRows = 2 * n - 1;
    for (int row = 0; row < totalRows; row++) {
        int distanceFromMiddle = abs(row - (n - 1));
        int spaces = distanceFromMiddle;
        int stars = 2 * (n - distanceFromMiddle) - 1;
        
        for (int s = 0; s < spaces; s++) cout << ' ';
        for (int s = 0; s < stars; s++) cout << '*';
        cout << '\n';
    }
}

int main() {
    int n;
    cout << "Enter number of rows (half diamond height): ";
    cin >> n;
    
    if (n <= 0) {
        cout << "Please enter a positive integer.\n";
        return 1;
    }
    
    cout << "\nDiamond Pattern (n=" << n << "):\n\n";
    printDiamond(n);
    
    cout << "\n--- Single Loop Version ---\n\n";
    printDiamondSingleLoop(n);
    
    return 0;
}

ผลลัพธ์ (n=4)

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

Variations

1. Hollow Diamond

void printHollowDiamond(int n) {
    for (int i = 1; i <= n; i++) {
        for (int s = 0; s < n - i; s++) cout << ' ';
        for (int s = 0; s < 2 * i - 1; s++) {
            if (s == 0 || s == 2*i-2 || i == n) cout << '*';
            else cout << ' ';
        }
        cout << '\n';
    }
    for (int i = n - 1; i >= 1; i--) {
        for (int s = 0; s < n - i; s++) cout << ' ';
        for (int s = 0; s < 2 * i - 1; s++) {
            if (s == 0 || s == 2*i-2) cout << '*';
            else cout << ' ';
        }
        cout << '\n';
    }
}

2. Diamond with Numbers

void printNumberDiamond(int n) {
    for (int i = 1; i <= n; i++) {
        for (int s = 0; s < n - i; s++) cout << ' ';
        for (int s = 1; s <= i; s++) cout << s;
        for (int s = i - 1; s >= 1; s--) cout << s;
        cout << '\n';
    }
    for (int i = n - 1; i >= 1; i--) {
        for (int s = 0; s < n - i; s++) cout << ' ';
        for (int s = 1; s <= i; s++) cout << s;
        for (int s = i - 1; s >= 1; s--) cout << s;
        cout << '\n';
    }
}

Output for Number Diamond (n=4)

   1
  121
 12321
1234321
 12321
  121
   1

3. Alphabet Diamond

void printAlphaDiamond(int n) {
    for (int i = 1; i <= n; i++) {
        for (int s = 0; s < n - i; s++) cout << ' ';
        for (int s = 0; s < i; s++) cout << char('A' + s);
        for (int s = i - 2; s >= 0; s--) cout << char('A' + s);
        cout << '\n';
    }
    for (int i = n - 1; i >= 1; i--) {
        for (int s = 0; s < n - i; s++) cout << ' ';
        for (int s = 0; s < i; s++) cout << char('A' + s);
        for (int s = i - 2; s >= 0; s--) cout << char('A' + s);
        cout << '\n';
    }
}

Complexity

  • Time: O(N²) - ต้องพิมพ์ ~N² Characters
  • Space: O(1) - ไม่ใช้ Extra Space

Common Pattern Problems

PatternRowsStars Formula
PyramidN2i-1
Inverted PyramidN2(N-i)+1
Diamond2N-1Upper: 2i-1, Lower: 2(N-i)-1
Hourglass2N-1Upper: 2(N-i)+1, Lower: 2i-1