HDU 2091 要求打印空心等腰三角形:給定字符和高度 n (0 < n < 41),底邊長 2n-1,內部為空格。多組數據之間空一行,遇到 '@' 結束。本文詳細分析行列規律、格式控制陷阱及 AC 代碼。
以 n=4, 字符 'X' 為例:
X 第1行:1個字符,前導空格 n-1 X X 第2行:2個字符,中間空格 1 X X 第3行:2個字符,中間空格 3 XXXXXXX 第4行:2n-1=7個字符,無空格
n - i 個2*(i-1) - 1 = 2i-3 個,第 2 個字符2*n - 1 個字符%s 讀入字符串,printf("%s", str) 輸出,支援任意可打印字符。#include <stdio.h>
#include <string.h>
int main() {
int n;
char ch[10];
int firstCase = 1;
while (scanf("%s", ch) != EOF) {
if (ch[0] == '@') break;
scanf("%d", &n);
if (!firstCase) printf("\n"); // 第2組起,輸出前先空一行
firstCase = 0;
// 第1行到第n-1行
for (int i = 1; i < n; ++i) {
for (int j = 1; j <= n - i; ++j) printf(" ");
printf("%s", ch);
if (i > 1) {
for (int k = 1; k <= 2 * i - 3; ++k) printf(" ");
printf("%s", ch);
}
printf("\n");
}
// 第n行(底邊)
for (int i = 1; i <= 2 * n - 1; ++i) printf("%s", ch);
printf("\n");
}
return 0;
}
| 變量 | 含義 |
|---|---|
| firstCase | 標記是否為第一組數據,控制組間空行 |
| i | 當前行號 (1~n) |
| j | 前導空格計數器 |
| k | 中間空格計數器 (2i-3) |
cat -A 查看)。空心三角形屬於「規律找規律、格式控制」類基礎題。核心難點不在算法,而在於精確處理組間空行、行末無空格、字符串輸出等格式細節。建議比賽前多練習此類輸出格式敏感題,養成「先寫骨架、再填邏輯、最後驗證格式」的習慣。