循环嵌套就是循环里面套循环,属于 GESP 4 级基础必考。外层每执行一次,内层就完整跑完一轮。两层嵌套的时间复杂度是 O(n²),三层就是 O(n³),写的时候要特别注意别掉进"超时陷阱"。
核心要搞清楚两件事:
💡 注意:内层循环条件是 j <= i 而不是 j <= 9,这样才打印出上三角形状。
for(int i=1; i<=5; i++)
for(int j=1; j<=i; j++)
cout << "*";
* * ** * * * *#include <iostream>
using namespace std;
int main() {
int n; cin >> n; // 读入奇数n
int mid = n / 2; // 中间行索引(从0开始)
for(int i = 0; i < n; i++) {
int dist = abs(i - mid); // 当前行到中间行的距离
int spaces = dist; // 前导空格数
int stars = mid - dist; // 星号之间的间隔(空心:只打首尾)
cout << string(spaces, ' ');
cout << '*'; // 第一颗星
if(stars > 0) {
cout << string(stars * 2 - 1, ' ');
cout << '*'; // 最后一颗星(空心)
}
cout << endl;
}
return 0;
}
dist 决定空格数,stars 决定两颗星之间的空格数。上半部分 dist 递减、下半部分 dist 递增,用 abs() 统一处理。n=1 时 stars=0,只打一颗星,刚好符合边界。
i 是大忌!内层会把外层的 i 吃掉,外层循环直接乱套。记住:外层 i,内层 j(或 k)j <= i 和 j <= n 出来的图案完全不一样,写完先在纸上推两行验证i = 1 还是 i = 0 开始?差一个就多打或少打一行,题目给的示例是你的金标准