历届试题 打印十字图

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//先打印中间的十字形 再打印上下左右四条横线 再补全几个小方块
#include<iostream>
#define MAX 1000
using namespace std;
char g[MAX][MAX];
int main(){
int n;
cin>>n;
fill(g[0],g[0]+MAX*MAX,'.');
for(int i=2*n;i<=2*n+4;i++)
{
g[2*n+2][i]='$';
g[i][2*n+2]='$';
}

for(int i=0;i<n;i++){
int a=2*i,b=2*(i+1),c=4*n+5;
for(int k=b;k<c-b;k++){
g[k][a]='$';
g[k][c-1-a]='$';
g[a][k]='$';
g[c-1-a][k]='$';

}
//左上
g[b][b]='$';
g[b-1][b]='$';
g[b][b-1]='$';

g[c-1-b][b]='$';
g[c-b][b]='$';
g[c-1-b][b-1]='$';

g[b][c-1-b]='$';
g[b-1][c-1-b]='$';
g[b][c-b]='$';

g[c-1-b][c-1-b]='$';
g[c-b][c-1-b]='$';
g[c-1-b][c-b]='$';
}

for(int i=0;i<4*n+5;i++){
for(int j=0;j<4*n+5;j++)
cout<<g[i][j];
cout<<endl;
}
}

参考链接
https://blog.csdn.net/bear_huangzhen/article/details/78465458
http://www.voidcn.com/article/p-xxsmrnet-cr.html