上海计算机学会2026年月7月赛C++丙组T1 空心等腰三角形

发布时间:2026/8/3 5:22:01

上海计算机学会2026年月7月赛C++丙组T1 空心等腰三角形 空心等腰三角形题目描述给定一个整数nnn输出一个nnn行的空心等腰三角形例如当n4n 4n4时输出* * * * * *******输入格式单个整数表示nnn。输出格式nnn行表示一个空心等腰三角形第一行只有 1 个星号中间n−2n-2n−2行每行两个星号中间有空格隔开最后一行有2n−12n-12n−1个星号。数据范围1≤n≤1001 \leq n \leq 1001≤n≤100样例样例1输入:3输出:* * * *****样例2输入:6输出:* * * * * * * * * ***********题解我拿到这个题目后首先观察空心等腰三角形的规律。对于第i行从 1 开始总共有2n-1个字符位置列从 1 到2n-1。最后一行i n全部是星号这是最直接的边界条件。左侧的斜边每一行的第一个星号出现在第n - i 1列也就是满足i j n 1的位置。右侧的斜边每一行的第二个星号出现在第n i - 1列即满足j - i n - 1的位置。第一行时左右两条斜边交汇在同一个点正中间所以只输出一个星号不会重复。因此我遍历每个位置(i, j)只要满足上述三个条件之一就输出*否则输出空格。这样就能逐行构造出图形。时间复杂度是 O(n²)对于 n ≤ 100 完全足够。下面是我实现的代码并添加了注释说明每一步的思考。#includebits/stdc.husingnamespacestd;intmain(){intn;cinn;// 读入行数同时也是等腰三角形的高度for(inti1;in;i){// i 表示当前行从上到下for(intj1;jn*2-1;j){// j 表示当前列从左到右共 2n-1 个位置// 判断当前位置是否需要打印星号// 条件1: i n → 最后一行全部是星号// 条件2: i j n 1 → 左侧斜边从左上到右下// 条件3: j - i n - 1 → 右侧斜边从右上到左下if(in||ijn1||j-in-1){cout*;}else{cout ;// 其他位置输出空格}}coutendl;// 每行结束后换行}return0;}

相关新闻