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


      题目如下:
     
    问题描述

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

    ..$$$$$$$$$$$$$..
    ..$...........$..
    $$$.$$$$$$$$$.$$$
    $...$.......$...$
    $.$$$.$$$$$.$$$.$
    $.$...$...$...$.$
    $.$.$$$.$.$$$.$.$
    $.$.$...$...$.$.$
    $.$.$.$$$$$.$.$.$
    $.$.$...$...$.$.$
    $.$.$$$.$.$$$.$.$
    $.$...$...$...$.$
    $.$$$.$$$$$.$$$.$
    $...$.......$...$
    $$$.$$$$$$$$$.$$$
    ..$...........$..
    ..$$$$$$$$$$$$$..

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

    输入格式
    一个正整数 n (n<30) 表示要求打印图形的层数。
    输出格式
    对应包围层数的该标志。
    样例输入1
    1
    样例输出1
    ..$$$$$..
    ..$...$..
    $$$.$.$$$
    $...$...$
    $.$$$$$.$
    $...$...$
    $$$.$.$$$
    ..$...$..
    ..$$$$$..
    样例输入2
    3
    样例输出2
    ..$$$$$$$$$$$$$..
    ..$...........$..
    $$$.$$$$$$$$$.$$$
    $...$.......$...$
    $.$$$.$$$$$.$$$.$
    $.$...$...$...$.$
    $.$.$$$.$.$$$.$.$
    $.$.$...$...$.$.$
    $.$.$.$$$$$.$.$.$
    $.$.$...$...$.$.$
    $.$.$$$.$.$$$.$.$
    $.$...$...$...$.$
    $.$$$.$$$$$.$$$.$
    $...$.......$...$
    $$$.$$$$$$$$$.$$$
    ..$...........$..
    ..$$$$$$$$$$$$$..
    提示
    请仔细观察样例,尤其要注意句点的数量和输出位置。
    ---------分割线---------
      在看到这个题目的时候其实是一脸懵逼,“.”和“$”把眼睛都看花了,后来按照提示把“.”在纸上画了,如下图所示:

      将就着看吧,哈哈!

      分析图后,了解到行列数与层数的关系:5*n+4。我使用了2维数组,现将5*n+4行5*n+4列填满‘$’字符,然后画出点。我是这样处理的,先将四个角的正方形画出来,然后根据层数画出十字圈,起点为空心十字的中心点的左上角,可以发现上图中坐标的规律,终点类似推出规律(十字圈分2部分画出,第一部分是8条短线,第二部分是4条长线)。具体看代码吧:

      

    #include<stdio.h>
    #define maxnumber 30*4+5  
    int main()
    {
        int i,j,x,start,end;
        char a[maxnumber][maxnumber];
        int b[4];
        scanf("%d",&x);
        for(i=0;i<x*4+5;i++)
            for(j=0;j<x*4+5;j++)
                a[i][j]='$';
        b[0]=0;b[1]=1;b[2]=4*x+3;b[3]=4*x+4;
        start=3;end=4*x+1;
        for(i=0;i<4;i++)
            for(j=0;j<4;j++)
                a[b[i]][b[j]]='.';
        for(i=0;i<x;i++)
        {
            for(j=0;j<3;j++)
            {
                a[start][start-j]='.';
                a[start-j][start]='.';
                a[start][end+j]='.';
                a[start-j][end]='.';
                a[end][start-j]='.';
                a[end+j][start]='.';
                a[end][end+j]='.';
                a[end+j][end]='.';
            }
            for(j=0;j<end-start;j++)
            {
                a[start-2][start+j]='.';
                a[start+j][start-2]='.';
                a[end+2][start+j]='.';
                a[start+j][end+2]='.';
            }
            start+=2;
            end-=2;
        }
        for(i=0;i<x*4+5;i++)
        {
            for(j=0;j<x*4+5;j++)
                printf("%c",a[i][j]);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/search-the-universe/p/holiday-2.html
Copyright © 2020-2023  润新知