历届试题 打印十字图
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
样例输入2
3
样例输出2
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
代码
#include <iostream>
using namespace std;
char fan(char i)
{
return i=='$'?'.':'$';
}
int main()
{
int n;
cin>>n;
char ten[5+n*4+1][5+n*4+1];
for(int i=1;i<=5+n*4;i++)
{
for(int j=1;j<=5+n*4;j++)
{
ten[i][j]=' ';
}
}
for(int i=1;i<=(5+4*n);i++)
{
if(i>=3&&i<=5+4*n-2)
{
ten[1][i]='$';
ten[i][1]='$';
}
else
{
ten[1][i]='.';
ten[i][1]='.';
}
}
for(int j=1;j<=(5+4*n);j++)
{
if(j>=3&&j<=5+4*n-2)
{
ten[5+4*n][j]='$';
ten[j][5+4*n]='$';
}
else
{
ten[j][5+4*n]='.';
ten[5+4*n][j]='.';
}
}
ten[1][1]='$';
ten[1][5+4*n]='$';
ten[5+4*n][1]='$';
ten[5+4*n][5+4*n]='$';
for(int i=1;i<(5+4*n)/2;i++)
{
for(int j=1;j<(5+4*n)/2;j++)
{
ten[i+1][j+1]=fan(ten[i][j]);
}
}
for(int i=1;i<(5+4*n)/2;i++)
{
for(int j=(5+4*n);j>(5+4*n)/2+2;j--)
{
ten[i+1][j-1]=fan(ten[i][j]);
}
}
for(int i=(5+4*n);i>(5+4*n)/2+2;i--)
{
for(int j=1;j<(5+4*n)/2;j++)
{
ten[i-1][j+1]=fan(ten[i][j]);
}
}
for(int i=(5+4*n);i>(5+4*n)/2+2;i--)
{
for(int j=(5+4*n);j>(5+4*n)/2+2;j--)
{
ten[i-1][j-1]=fan(ten[i][j]);
}
}
ten[1][1]='.';
ten[1][5+n*4]='.';
ten[5+n*4][1]='.';
ten[5+n*4][5+n*4]='.';
int top=(5+n*4)/2-2,down=(5+n*4)/2+4,left=(5+n*4)/2-2,right=(5+n*4)/2+4;
while(top>=1)
{
ten[top][(5+n*4)/2+1]='.';
ten[top-1][(5+n*4)/2+1]='$';
top-=2;
}
while(down<(5+4*n+1))
{
ten[down][(5+n*4)/2+1]='.';
ten[down+1][(5+n*4)/2+1]='$';
down+=2;
}
while(left>=1)
{
ten[(5+n*4)/2+1][left]='.';
ten[(5+n*4)/2+1][left-1]='$';
left-=2;
}
while(right<(5+4*n+1))
{
ten[(5+n*4)/2+1][right]='.';
ten[(5+n*4)/2+1][right+1]='$';
right+=2;
}
ten[(5+n*4)/2+1][(5+n*4)/2+1]='$';
ten[(5+n*4)/2-1][(5+n*4)/2+1]='$';
ten[(5+n*4)/2][(5+n*4)/2+1]='$';
ten[(5+n*4)/2+2][(5+n*4)/2+1]='$';
ten[(5+n*4)/2+3][(5+n*4)/2+1]='$';
ten[(5+n*4)/2+1][(5+n*4)/2-1]='$';
ten[(5+n*4)/2+1][(5+n*4)/2]='$';
ten[(5+n*4)/2+1][(5+n*4)/2+2]='$';
ten[(5+n*4)/2+1][(5+n*4)/2+3]='$';
for(int i=1;i<=5+n*4;i++)
{
for(int j=1;j<=5+n*4;j++)
{
printf("%c",ten[i][j]);
}
cout<<endl;
}
return 0;
}