历届试题 打印十字图
时间限制:1.0s 内存限制:256.0MB
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
样例输入2
3
样例输出2
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
这个题其实很简单,就是很麻烦,费死那时间了!!!还是不够熟练啊~~
代码:
#include<iostream>
using namespace std;
int main()
{
int num,n;
cin>>num;
n=5+num*4;
char a[150][150];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]='.';
for(int i=1;i<=n/2-1;i+=2)
{
if(i!=1)
{
a[i][i-1]='$';
a[i][i]='$';
a[i][n-i+1]='$';
a[i][n-i+2]='$';
}
for(int j=i+2;j<=n-i-1;j++)
a[i][j]='$';
}
for(int i=3;i<=n/2+1;i++)
{
a[i][1]='$';
a[i][n]='$';
}
a[n/2][n/2+1]='$';
a[n/2-1][n/2+1]='$';
for(int i=n/2;i<=n/2+2;i++)
a[n/2+1][i]='$';
for(int j=1;j<=n/2-1;j+=2)
{
for(int i=j+2;i<=n/2+1;i++)
a[i][j]='$';
}
for(int j=n/2+3;j<=n;j+=2)
{
for(int i=n-j+3;i<=n/2+1;i++)
a[i][j]='$';
}
for(int i=2;i<=n/2-2;i+=2)
{
a[i][i+1]='$';
a[i][n-i]='$';
}
for(int i=1;i<=n/2+1;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j];
cout<<endl;
}
for(int i=n/2;i>=1;i--)
{
for(int j=1;j<=n;j++)
cout<<a[i][j];
cout<<endl;
}
return 0;
}