• 蓝桥杯历届试题 打印十字图 文字图形


      历届试题 打印十字图  

    时间限制:1.0s   内存限制:256.0MB

          

    问题描述

    小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:

    对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

    输入格式

    一个正整数 n (n<30) 表示要求打印图形的层数。

    输出格式

    对应包围层数的该标志。

    样例输入1

    1

    样例输出1

    .

    提示

    请仔细观察样例,尤其要注意句点的数量和输出位置。

    题解:从中心点开始向外延伸,然后补全拐角;

    #include<iostream>
    using namespace std;
    char s[222][222];
    int main()
    {
            int n;
            scanf("%d",&n);
            for(int i=1;i<=4*n+5;i++)
                    for(int j=1;j<=4*n+5;j++)
                            s[i][j]='.';
            int x0,y0;//中心点
            x0=y0=2*n+3;
            s[x0][y0]='$';
            for(int i=0;i<=n;i++){//向外一层一层打印
                    for(int j=x0-i*2;j<=x0+i*2;j++){//长度为i*2+1的一行或者一列
                            s[x0-(i+1)*2][j]='$';//上面一行
                            s[x0+(i+1)*2][j]='$';//下面一行
                            s[j][x0-(i+1)*2]='$';//左边一列
                            s[j][x0+(i+1)*2]='$';//右边一列
                    }
                    //下面补齐每一层的四个角
                    s[x0+i*2][y0+i*2]=s[x0+i*2+1][y0+i*2]=s[x0+i*2][y0+i*2+1]='$';//右下角三个
                    s[x0+i*2][y0-i*2]=s[x0+i*2+1][y0-i*2]=s[x0+i*2][y0-i*2-1]='$';//右上角三个
                    s[x0-i*2][y0+i*2]=s[x0-i*2-1][y0+i*2]=s[x0-i*2][y0+i*2+1]='$';//左下角三个
                    s[x0-i*2][y0-i*2]=s[x0-i*2-1][y0-i*2]=s[x0-i*2][y0-i*2-1]='$'; //左上角三个
            }
            for(int i=1;i<=4*n+5;i++){
                    for(int j=1;j<=4*n+5;j++)
                            printf("%c",s[i][j]);
                    printf("
    ");
            }
            return 0;
    }
    
  • 相关阅读:
    深入理解 Netty-新连接接入
    深入理解 Netty-Channel架构体系
    深入理解 NioEventLoop启动流程
    深入理解 NioEventLoopGroup初始化
    java8-Stream
    WebSocket+Netty构建web聊天程序
    Jpa 笔记
    观察者模式
    一只垂直的小爬虫
    字符集编码全方位解析
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/10459913.html
Copyright © 2020-2023  润新知