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

  历届试题 打印十字图  

时间限制: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("\n");
        }
        return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值