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

2019-05-22  本文已影响0人  MMatx

思路:这个题目比较简单,一开始没看出来是什么图形,后来突然发现,中间是一个十字架,周围是一个闭合的图形把中间的十字架包围起来了,题目的意思是输入外面闭合图形的层数,输出最后的图形。
这个图形打印我是分成三个部分做的,中间十字架的部分,十字架上面的区域,十字架下面的区域,其实十字架上面的区域和下面的区域是相同的,画出一个部分,另一个部分就画出来了。

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

char ans[200][200];
int main()
{
    int n;
    cin>>n;
    int m=5+n*4;

    int r=(m)/2;
    int c=(m)/2;
    /// 中间五行

    for(int rr=r-2; rr<=r+2; rr++)
    {
        int i;
        for(i=0; i<n*2; i+=2)
        {
            ans[rr][i]='$';
            ans[rr][i+1]='.';
        }
        for(int j=1; j<=5; j++)
        {
            ans[rr][i++]='$';
        }
        for(i; i<m; i+=2)
        {
            ans[rr][i]='.';
            ans[rr][i+1]='$';
        }
    }
    ans[r-1][c-1]=ans[r-1][c-2]=ans[r-1][c+1]=ans[r-1][c+2]='.';
    ans[r+1][c-1]=ans[r+1][c-2]=ans[r+1][c+1]=ans[r+1][c+2]='.';
    ans[r-2][c-1]=ans[r-2][c+1]=ans[r+2][c-1]=ans[r+2][c+1]='.';
    ans[r-2][c-3]=ans[r-2][c+3]=ans[r+2][c-3]=ans[r+2][c+3]='$';
    int nn=n-1;
    for(int i=0; i<n*2; i+=2)
    {
        int mid=5+nn*4;
        nn--;
        if(i==0)
        {
            for(int j=0; j<2; j++)
            {
                ans[i][j]='.';
                ans[i+1][j]='.';
            }
            for(int j=0; j<mid; j++)
            {
                ans[i][j+2]='$';
                if(j==0||(j==mid-1))
                {
                    ans[i+1][j+2]='$';
                }
                else
                {
                    ans[i+1][j+2]='.';
                }
            }
            for(int j=0; j<2; j++)
            {
                ans[i][j+mid+2]='.';
                ans[i+1][j+mid+2]='.';
            }

        }
        else
        {
            int t=mid+2+6;
            int rr=(m-t)/2;
            for(int j=0; j<rr; j+=2)
            {
                ans[i][j]=ans[i+1][j]='$';
                ans[i][j+1]=ans[i+1][j+1]='.';
                ans[i][m-j-1]=ans[i+1][m-j-1]='$';
                ans[i][m-j-2]=ans[i+1][m-j-2]='.';
            }
            for(int j=0; j<3; j++)
            {
                ans[i][j+rr]=ans[i+1][j+rr]='$';
                ans[i][j+rr+mid+3+2]=ans[i+1][j+rr+mid+3+2]='$';///
            }
            ans[i][rr+3]=ans[i+1][rr+3]='.';
            ans[i][rr+3+mid+1]=ans[i+1][rr+3+mid+1]='.'; ///
            for(int j=0; j<mid; j++)
            {
                ans[i][j+rr+3+1]=ans[i+1][j+rr+3+1]='$';
            }
            int tt=mid/2-1;
            for(int j=0; j<=tt; j++)
            {
                ans[i+1][c-j]='.';
                ans[i+1][c+j]='.';
            }
            ans[i+1][c-mid/2-2]=ans[i+1][c-mid/2-3]='.';///
            ans[i+1][c+mid/2+2]=ans[i+1][c+mid/2+3]='.';///

        }

    }
    nn=n-1;
    for(int i=m-1; i>c+2; i-=2)
    {
        int mid=5+nn*4;
        nn--;
        if(i==m-1)
        {
            for(int j=0; j<2; j++)
            {
                ans[i][j]='.';
                ans[i-1][j]='.';
            }
            for(int j=0; j<mid; j++)
            {
                ans[i][j+2]='$';
                if(j==0||(j==mid-1))
                {
                    ans[i-1][j+2]='$';
                }
                else
                {
                    ans[i-1][j+2]='.';
                }
            }
            for(int j=0; j<2; j++)
            {
                ans[i][j+mid+2]='.';
                ans[i-1][j+mid+2]='.';
            }

        }
        else
        {
            int t=mid+2+6;
            int rr=(m-t)/2;
            for(int j=0; j<rr; j+=2)
            {
                ans[i][j]=ans[i-1][j]='$';
                ans[i][j+1]=ans[i-1][j+1]='.';
                ans[i][m-j-1]=ans[i-1][m-j-1]='$';
                ans[i][m-j-2]=ans[i-1][m-j-2]='.';
            }
            for(int j=0; j<3; j++)
            {
                ans[i][j+rr]=ans[i-1][j+rr]='$';
                ans[i][j+rr+mid+3+2]=ans[i-1][j+rr+mid+3+2]='$';///
            }
            ans[i][rr+3]=ans[i-1][rr+3]='.';
            ans[i][rr+3+mid+1]=ans[i-1][rr+3+mid+1]='.'; ///
            for(int j=0; j<mid; j++)
            {
                ans[i][j+rr+3+1]=ans[i-1][j+rr+3+1]='$';
            }
            int tt=mid/2-1;
            for(int j=0; j<=tt; j++)
            {
                ans[i-1][c-j]='.';
                ans[i-1][c+j]='.';
            }
            ans[i-1][c-mid/2-2]=ans[i-1][c-mid/2-3]='.';///
            ans[i-1][c+mid/2+2]=ans[i-1][c+mid/2+3]='.';///

        }
    }
    for(int i=0; i<m; i++)
    {
        cout<<ans[i]<<endl;
    }
}

上一篇 下一篇

猜你喜欢

热点阅读