《算法笔记》笔记之笔记 - 3、入门模拟(3) - 图形输出

16 篇文章 0 订阅
16 篇文章 0 订阅

3.3 图形输出

这里的图形一般都是由若干字符组成的,所以弄清楚规则输出字符就行。做法一般有两种:

  1. 通过规律直接进行输出;
  2. 定义一个二维字符数组,通过规律填充之后输出整个二维字符数组。
【PAT B1036】跟奥巴马一起编程

题目描述:

美国总统奥巴马不仅呼吁所有人都学习编程,甚至亲自编写代码,称为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了一个简单的计算机程序——在屏幕上画一个正方形,现在你也跟他“一起”编程吧!

输入格式:

在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。

输出格式:

由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,所输出的行数实际上是列数的50%(四舍五入取整)。

样例输入:

10 a

样例输出:

aaaaaaaaaa

a                a

a                a

a                a

aaaaaaaaaa

思路:

由于行数是列数的50%,而C语言的整数除法只会保留商,这里我们要注意调整一下。假设正方形边长为N,那么列数col=N,行数要根据col的奇偶进行调整,若col为奇数,行数row=col/2+1,若N为偶数,row=col/2。

此外,仔细观察样例输出我们可以知道,最后的输出其实主要分为两个部分。第一个部分包括第一行和最后一行,它们循环输出字符即可;第二个部分是除此之外的中间部分,它们只会在第一列和最后一列输出字符,中间则输出了(col-2)个空格。

参考代码:

#include <cstdio>

int main(){

    // 读入正方形边长n和填充正方形的字符c
    int n;
    char c;
    scanf("%d %c", &n, &c);

    // 记录最终输出的正方形的行数row和列数col
    int row, col;
    // 列数col等于正方形的边长
    col = n;
    // 行数row等于列数的50%(四舍五入)
    if(col % 2 == 1){
        row = col / 2 + 1;
    }else{
        row = col / 2;
    }

    // 按行进行图形输出,主要分为两部分
    for(int i=0; i<row; i++){
        // 除去第一行和最后一行,中间所有行都是只
        // 在第一列和最后一列输出字符,其他位置输出空格
        if(i > 0 && i < row-1){
            // 第一列的字符
            printf("%c", c);
            // 中间的空格
            for(int j=1; j<col-1; j++){
                printf(" ");
            }
            // 最后一列的字符
            printf("%c", c);        
        }else{
            // 第一行和最后一行循环输出字符
            for(int j=0; j<col; j++){
                printf("%c", c);
            }
        }
        // 不要忘记每行输出完都要换行
        printf("\n");
    }

    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值