輸出星號金字塔圖案(高 5 行)。核心考點:雙層循環行列控制、幾何不等式判斷打印區域、空格與星號交替。
#include
const int NUM = 5;
int main() {
for (int i = 1; i <= NUM; i++) { // 行 1~5
for (int j = 1; j < 2*NUM; j++) { // 列 1~9 (2*5-1)
// 金字塔區域: NUM-i+1 <= j <= NUM+i-1
if (j >= NUM - i + 1 && j <= NUM + i - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
第 i 行 (1-indexed):
j >= NUM-i+1 && j <= NUM+i-1
*
***
*****
*******
*********
| 方法 | 核心邏輯 | 優點 | 適用場景 |
|---|---|---|---|
| 幾何不等式 (原版) | 單雙層循環 + 區域判斷 | 統一框架,易修改形狀 (菱形、三角、圓) | 複雜幾何圖案 |
| 分段打印 | 打印空格、打印星號、換行 | 直觀、無分支預測失敗、效率高 | 簡單幾何、教學演示 |
| 字符串構造 | sprintf/填充字符串 | 減少 I/O 調用、易對齊 | 大圖案、緩衝輸出 |
void print_pyramid_segments(int n) {
for (int i = 1; i <= n; i++) {
// 前導空格: n-i
for (int s = 0; s < n - i; s++) printf(" ");
// 星號: 2i-1
for (int s = 0; s < 2*i - 1; s++) printf("*");
printf("\n");
}
}
void print_diamond(int n) {
// 上半部金字塔
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= 2*n-1; j++)
if (j >= n-i+1 && j <= n+i-1) printf("*");
else printf(" ");
printf("\n");
}
// 下半部倒金字塔
for (int i = n-1; i >= 1; i--) {
for (int j = 1; j <= 2*n-1; j++)
if (j >= n-i+1 && j <= n+i-1) printf("*");
else printf(" ");
printf("\n");
}
}
void print_circle(int r) {
for (int y = -r; y <= r; y++) {
for (int x = -r; x <= r; x++) {
if (x*x + y*y <= r*r) printf("*");
else printf(" ");
}
printf("\n");
}
}
星號金字塔是「雙層循環、幾何區域判斷、分段打印優化」的綜合練習。關鍵收穫: