蓝桥杯 历届试题 打印十字图
题目如下:
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑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("\n"); } return 0; }