题解
【基础】空心六边形-2
1 条题解
-
0
解题思路
题目要求打印一个空心的正六边形。拿 n=5 来看:
***** * * * * * * * * * * * * * * *****一共 2n-1 = 9 行,中间行是第 n 行。
找规律:先算这一行到中间行的距离 d,例如:
- 第 1 行 d=4,第 2 行 d=3,…… 中间行 d=0,然后又开始变大
每一行的结构:
- 左边星在位置 d
- 右边星在位置 3×(n-1) - d
- 第一行和最后一行是整排星(n 个)
- 其他行只有左右两端各一个星,中间是空格
右边星为什么是 3(n-1)-d? 因为最宽处(中间行)右边星在 2n-2 列,左边星在 0 列,随着远离中间行两边各往中间收。
参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int total = 2 * n - 1; // 总行数 int mid = n - 1; // 中间行的行号 for (int i = 0; i < total; i++) { // 距离中间行的距离 int d = i - mid; if (d < 0) d = -d; // 左边星的位置 int left = d; // 右边星的位置 int right = 3 * mid - d; for (int j = 0; j <= right; j++) { if (j < left) { // 左边是空格 cout << ' '; } else if (i == 0 || i == total - 1 || j == left || j == right) { // 首末行或两端画星 cout << '*'; } else { cout << ' '; } } cout << endl; } return 0; }复杂度分析
- 时间复杂度:O(N²),每行打印的字符数约等于 n²
- 空间复杂度:O(1)
- 1