题解
【入门】蝴蝶结
1 条题解
-
0
解题思路
题目要求打印 n 行的蝴蝶结图形。拿 n=9 来看:
***** **** *** ** * ** *** **** *****你会发现星号数量先变少再变多:
- 第 1 行 5 个星,第 2 行 4 个……中间行 1 个星
- 然后又从 2 个、3 个……回到 5 个
规律:每行星数 = 这一行到中间行的距离 + 1。
n=9 时中间行是第 5 行(行号从 0 算),距离:
- 第 1 行距离 4 → 4+1=5 个星
- 第 2 行距离 3 → 3+1=4 个星
- ……
- 中间行距离 0 → 0+1=1 个星
- 下面又对称变大
用 i 表示行号,距离 d = |i - n/2|,星数就是 d+1。
参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int mid = n / 2; // 中间行行号 for (int i = 0; i < n; i++) { // 星数 = 到中间行的距离 + 1 int d = i - mid; if (d < 0) d = -d; for (int j = 0; j < d + 1; j++) cout << '*'; cout << endl; } return 0; }复杂度分析
- 时间复杂度:O(N²),每行输出 d+1 个星
- 空间复杂度:O(1)
- 1