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

  题目如下:
 
问题描述

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

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

对方同时也需要在电脑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;
}
原文地址:https://www.cnblogs.com/search-the-universe/p/holiday-2.html