美文网首页
蓝桥杯_ 历届试题 打印十字图

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

作者: MMatx | 来源:发表于2019-05-22 15:40 被阅读0次

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

#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;
    }
}

相关文章

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

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

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

    思路:这个题目比较简单,一开始没看出来是什么图形,后来突然发现,中间是一个十字架,周围是一个闭合的图形把中间的十字...

  • 蓝桥杯 历届试题 幸运数

    问题描述幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成首先从1开始写出自然数1,2,3,4,5...

  • 蓝桥杯 历届试题 分糖果

    问题描述有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:每个小朋友都把自己的糖果分一...

  • 蓝桥杯练习系统历届试题

    PREV-1 核桃数量思路a,b,c 的最小公倍数利用gcd算法

  • 蓝桥杯 历届试题 回文数字

    问题描述观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数...

  • 蓝桥杯 历届试题 数字游戏

    问题描述栋栋正在和同学们玩一个数字游戏。游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。...

  • 蓝桥杯 历届试题 蚂蚁感冒

    问题描述长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是1厘...

  • 蓝桥杯 历届试题 错误票据

    问题描述某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID...

  • 蓝桥杯_ 历届试题 翻硬币

    思路:其实这个题目比较简单,如果第一个串可以经过翻转变成第二个串,那这两个串不同字符的个数一定是偶数个,现在就是想...

网友评论

      本文标题:蓝桥杯_ 历届试题 打印十字图

      本文链接:https://www.haomeiwen.com/subject/deduzqtx.html