1 条题解

  • 0
    @ 2025-8-24 21:17:17

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar yummy
    这个人是时代的眼泪,什么也没有留下

    搬运于2025-08-24 21:17:17,当前版本为作者最后更新于2025-01-20 14:16:45,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    本题考查循环的综合应用,对选手分析题目、拆解结构的能力也提出了一定要求。

    我们可以通过循环嵌套实现二维图形的输出。外层循环枚举行号 ii,而内层循环可以分为横杠和三角形分开写。

    for(int i=1;i<=n;i++){
        for(int j=1;j<=lbar;j++) // lbar 是矩形宽
                // 矩形部分
    		for(int j=1;j<=(n+1)/2;j++)
                // 三角形部分
    		printf("\n");
    }
    

    确定矩形形状

    三角形的水平宽度为 n+12\dfrac{n+1}{2},所以矩形部分的水平宽度 lbar=mn+12l_{bar}=m-\dfrac{n+1}{2}

    接下来考虑矩形部分哪些行是 #,哪些行是 .

    由于横杠一共 kk 行,上下部分留白一样高,所以矩形部分留白高度为 nk2\dfrac{n-k}{2}。由此可知矩形部分输出 # 的等价条件是 (n-k)/2 < i && i<= n-(n-k)/2

    确定三角形形状

    这一部分可以通过找规律等方法简化思考。

    n+12\dfrac{n+1}{2} 行内,第 ii 行会输出 ii#,因此输出 # 的条件是 jij\le i

    后面的行内,第 ii 行会输出 n+1in+1-i#,因此输出 # 的条件是 jn+1ij\le n+1-i

    但是实际写的时候,你不需要分类讨论 ii 在哪个半边(上半边还是下半边),只要把两个条件用 && 连接即可。不难发现,在一个半边生效的条件,在另一个半边总是自然生效的。

    • 1

    信息

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