题解
【入门】放大的箭头
1 条题解
-
0
解题思路
这道题要打印一个 n 行的箭头图形,每行都有 n 颗星,但前面空格的个数不一样。
拿 n=5 来看:
***** ***** ***** ***** *****你会发现:
- 第 1 行前面 0 个空格
- 第 2 行前面 1 个空格
- 第 3 行(中间)前面 2 个空格
- 第 4 行前面 1 个空格
- 第 5 行前面 0 个空格
空格数先变大再变小,正好等于"这一行到中间行的距离"。
用 i 表示行号(从 0 开始),n 表示总行数:
- 空格数 = min(i, n-1-i)
比如 i=0:min(0,4)=0;i=1:min(1,3)=1;i=2:min(2,2)=2。
所以每行先输出空格,再输出 n 颗星,就搞定了。
参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { // 空格数 = 行到中间行的距离 int k = i; if (n - 1 - i < k) k = n - 1 - i; for (int j = 0; j < k; j++) cout << ' '; // 每行 n 颗星 for (int j = 0; j < n; j++) cout << '*'; cout << endl; } return 0; }复杂度分析
- 时间复杂度:O(N²),n 行每行打印 n 个字符
- 空间复杂度:O(1)
- 1