问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
思路:将图形进行切割,再寻找规律
#include <iostream>
using namespace std;
/*
$ $ $ . $ . $
$ . . . $ . $
$ . $ $ $ . $
. . $ . . . $
$ $ $ . $ $ $
. . . . $ . .
$ $ $ $ $ . $
*/
int main()
{
int n;
cin >> n;
char map[61][61]; // 1 + 2 + 29 * 2 = 61
int len = 3 + n * 2;
for(int i = 0; i < len; i++){
for(int j = i; j < len; j++){
if(j % 2 == 0){
map[i][j] = '$';
map[j][i] = '$';
}else{
map[i][j] = '.';
map[j][i] = '.';
}
}
if(i + 1 < len){
map[i][i + 1] = map[i][i];
map[i + 1][i] = map[i][i];
}
}
map[len - 1][len - 1] = '.';
for(int i = len - 1; i >= 0; i--){
for(int j = len - 1; j >= 0; j--){
cout << map[i][j];
}
for(int j = 1; j < len; j++){
cout << map[i][j];
}
cout << endl;
}
for(int i = 1; i < len; i++){
for(int j = len - 1; j >= 0; j--){
cout << map[i][j];
}
for(int j = 1; j < len; j++){
cout << map[i][j];
}
cout << endl;
}
return 0;
}