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