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

  历届试题 打印十字图  

时间限制: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;
}
原文地址:https://www.cnblogs.com/aeipyuan/p/10459913.html