1 条题解

  • 0
    @ 2025-8-24 21:03:19

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Daniel_7216
    If there is a way to turn back and rebuild all the long lost dreams

    搬运于2025-08-24 21:03:18,当前版本为作者最后更新于2021-07-07 15:13:18,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


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

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

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

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

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

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

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

    Section B :对 f=0f = 0 时的分析

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

    Section C:程序设计思路

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

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

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

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

    附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

    • 1

    信息

    ID
    6940
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者