资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
观察法,最中间得就是一个十字,然后一层一层画,每一层又四个点同时出发画
#include<iostream>
#include<vector>
#include<string>
#include<sstream>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
char panel[122][122];
void draw_cross(int middle)
{
for(int i = middle - 2;i<=middle + 2;i++)
{
panel[middle][i] = '$';
panel[i][middle] = '$';
}
return ;
}
void draw(int middle, int n)
{
int row, col;
row = middle;
col = middle + 2 + 2 * n;
for(int i = 0;i<2*n+1;i++)
{
//1part
panel[row + i][col] = '$';
panel[row - i][col] = '$';
panel[row + i][2*middle - col] = '$';
panel[row - i][2*middle - col] = '$';
//4part
panel[row + 2*n + 2][col - 2 - i] = '$';
panel[row - 2*n - 2][col - 2 - i] = '$';
panel[row + 2*n + 2][2*middle - col + 2 + i] = '$';
panel[row - 2*n - 2][2*middle - col + 2 + i] = '$';
}
for(int i = 0;i<3;i++)
{
//2part
panel[row + 2*n][col - i] = '$';
panel[row - 2*n][col - i] = '$';
panel[row + 2*n][2*middle - col + i] = '$';
panel[row - 2*n][2*middle - col + i] = '$';
//3part
panel[row + 2*n + i][col - 2] = '$';
panel[row - 2*n - i][col - 2] = '$';
panel[row + 2*n + i][2*middle - col + 2] = '$';
panel[row - 2*n - i][2*middle - col + 2] = '$';
}
}
int main(int argc,char *argv[])
{
int n, middle;
memset(panel, '.', sizeof(panel));
cin>>n;
middle = 5;
for(int i = 1;i<n;i++)
middle += 2;
draw_cross(middle);
for(int i = 1; i<=n; i++)
draw(middle, i);
for(int i = 1; i<=4*n+5;i++)
{
for(int j = 1;j<=4*n+5;j++)
cout<<panel[i][j];
cout<<endl;
}
return 0;
}