1 121 12321 1234321 12321 121 1
每行由三部分組成:前導空格 + 遞增數字 + 遞減數字。
i (1-based)。
n - i1 到 ii-1 到 1i 從 n-1 遞減到 1,邏輯同上半部分。#include <stdio.h>
void print_diamond(int n) {
// 上半部含中線
for (int i = 1; i <= n; ++i) {
for (int s = 0; s < n - i; ++s) putchar(' ');
for (int j = 1; j <= i; ++j) printf("%d", j);
for (int j = i - 1; j >= 1; --j) printf("%d", j);
putchar('\n');
}
// 下半部
for (int i = n - 1; i >= 1; --i) {
for (int s = 0; s < n - i; ++s) putchar(' ');
for (int j = 1; j <= i; ++j) printf("%d", j);
for (int j = i - 1; j >= 1; --j) printf("%d", j);
putchar('\n');
}
}
int main() {
int n;
printf("輸入菱形行數 (建議 1-9): ");
scanf("%d", &n);
if (n > 0) print_diamond(n);
return 0;
}
putchar 更高效;數字用 printf("%d", j) 自動處理多位數(但會破壞對齊,n>9 時需定寬 %2d)。j = i-1; j >= 1; --j,中間行 i=1 時不執行。for 內聲明 (C99),避免汙染外層。printf("%d", j) 改為 putchar('A' + j - 1)。C(n,k) = C(n,k-1)*(n-k+1)/k 逐行計算。