【蓝桥杯】打印十字图(图形规律)
题目描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入1 ,则输出
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
输入
一个正整数 n (n< 30) 表示要求打印图形的层数。
输出
对应包围层数的该标志。
样例输入
3
样例输出
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
思路
从最外层开始打印‘$’, 先打印横线和竖线上的‘$’,再打印四个角的直角‘$’
1 #include<bits/stdc++.h>
2 using namespace std;
3 char s[220][220];
4 int main()
5 {
6 int n;
7 scanf("%d",&n);
8 int o=n*4+5;
9 int l=2,a=0;
10 memset(s,'.',sizeof(s));
11 n++;
12 while(n--)
13 {
14 for(int i=l; i<o-l; i++)
15 s[a][i]=s[i][a]=s[i][o-a-1]=s[o-a-1][i]='$';
16 s[a+1][l]=s[l][a+1]=s[l][l]='$';//左上
17 s[a+1][o-1-l]=s[l][o-a-2]=s[l][o-1-l]='$';//右上
18 s[o-a-2][l]=s[o-1-l][a+1]=s[o-1-l][l]='$';//左下
19 s[o-a-2][o-1-l]=s[o-1-l][o-a-2]=s[o-1-l][o-1-l]='$';//右下
20 a+=2;
21 l+=2;
22 }
23 for(int i=0; i<o; i++)
24 {
25 for(int j=0; j<o; j++)
26 putchar(s[i][j]);
27 putchar('\n');
28 }
29 return 0;
30 }