B4235 [四川青少年 C++ 算法设计大赛 2024] 4-5 年级组第 6 题

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

本题考察循环嵌套。

外面大矩形的边长为 a,而中间挖掉的正方形的边长为 b,可以得知:在第 \dfrac{a-b}{2}+1 行列到第 \dfrac{a+b}{2} 行列是需要被挖空的。

以样例的 a=6,b=2 为例,第 \dfrac{6-2}{2}+1=3 行列到第 \dfrac{6+2}{2}=4 行列是空的。

因此我们可以计算得到挖空区域的起始和终止位置。

int st = (a - b) / 2 + 1; // 计算挖空区域的起始位置
int ed = (a + b) / 2;

接着设计一个二重循环,外层 i 循环行数,内层 j 循环列数,判断当前位置是否是需要被挖空的即可完成本题。

参考代码(部分):

for (int i = 1; i <= a; i++) {
    for (int j = 1; j <= a; j++) {
        if (i >= st && i <= ed && j >= st && j <= ed)
            cout << ' ';
        else
            cout << '*';
    }
    cout << endl; // 每行结束后换行
}