打印十字图
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
思路:该图形是对称的,用二维数组存四分之一即可;规律:aij=aji
$$$.$.$.$
$...$.$.$
$.$$$.$.$
..$...$.$
$$$.$$$.$
....$...$
$$$$$.$$$
......$..
$$$$$$$..
#include <stdio.h>
int main()
{
int n,i,j,counts;
scanf("%d",&n);
int m=(n*2*2+5)/2+1;
char a[m][m];
for(i=0;i<m;i++)
{
counts=0;
for(j=i;j<m;j++)
{
if(i%2==0)
{
if(counts<3)
a[i][j]=a[j][i]='$';
else if(counts%2!=0)
a[i][j]=a[j][i]='.';
else if(counts%2==0)
a[i][j]=a[j][i]='$';
counts++;
}
else
{
if(counts<3)
a[i][j]=a[j][i]='.';
else if(counts%2!=0)
a[i][j]=a[j][i]='$';
else if(counts%2==0)
a[i][j]=a[j][i]='.';
counts++;
}
}
}
a[m-1][m-1]='.';
for(i=m-1;i>=0;i--)
{
for(j=m-1;j>=0;j--)
printf("%c",a[i][j]);
for(j=1;j<m;j++)
printf("%c",a[i][j]);
printf("\n");
}
for(i=1;i<m;i++)
{
for(j=m-1;j>=0;j--)
printf("%c",a[i][j]);
for(j=1;j<m;j++)
printf("%c",a[i][j]);
printf("\n");
}
return 0;
}