พิมพ์รูป 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
| Pattern | Rows | Stars Formula |
|---|---|---|
| Pyramid | N | 2i-1 |
| Inverted Pyramid | N | 2(N-i)+1 |
| Diamond | 2N-1 | Upper: 2i-1, Lower: 2(N-i)-1 |
| Hourglass | 2N-1 | Upper: 2(N-i)+1, Lower: 2i-1 |