B2083 画矩形 题解

· · 题解

这是很好的一道循环结构的入门题,所以今天要介绍的是一种更简洁的方法。

Section A : 前置芝士:三目运算符

所谓三目运算符,可以简单理解为 if……else…… 的简洁版本,即形如 条件表达式?成立时的表达式:不成立时的表达式 的形式。

例如,在我的程序中有这么一句:

printf("%c", f == 0?' ':c);

意思是,如果 f = 0 ,输出空格,否则输出指定字符。

这种方法很有用,可以使很多分支结构程序简洁不少。

Section B :对 f = 0 时的分析

如果我们从 (0,0) 开始,画出一个空心矩形,那么不难发现,当前位置 (i,j) 满足 i=0i = a - 1j=0j = b - 1 中的任何一种的话就要填充字符。

Section C:程序设计思路

如果理解上面 Section B 的思路,你就可以 A 了。

我们能否不用把程序分为两部分而是直接用两层循环解决问题呢?

可以。按照刚才的思路,如果不满足在矩形四边的条件f=1 则可以照常输出, f=0 就输出空格。在这里我用的是三目运算符实现的。

如果在四条边上,那么不管 f 为何值,照常输出即可。

附15行代码:

#include <cstdio>
int a, b, f;
char c;
int main(){
    scanf("%d %d %c %d", &a, &b, &c, &f);
    for (int i = 0; i < a; i++){
        for (int j = 0; j < b; j++){
            if (i != 0 && i != a - 1 && j != 0 && j != b - 1)
                printf("%c", f == 0?' ':c); 
            else printf("%c", c);
        }
        printf("\n");
    }
    return 0;
}

第一篇题解求通过 QAQ