问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
本来看到这道题我都不太想做了,可是我发现这样不好,现在不做,之后比赛我更做不出来。首先我把图画下来找规律,很容易发现这个图形是中心对称(不考虑宽窄的话),于是我想到了只找图形的四分之一或者八分之一的规律,然后就用对称把图形弄完整,于是我空想了很久,找了挺多规律,但我又觉得自己找到的规律不好实现。于是我就百度了。。。。看了许多人总结的,我发现有的人真的超级不怕麻烦,可能找下来的规律不是最简便的,但别人至少写出代码了。于是我受到了鼓舞。我用的是我在网上看见的我觉得最简单的规律,就是把那四分之一分成三部分,实现起来也比较简单。
还有我中间出现了一个问题,我发现在写代码用到一个变量的时候,一定要确定这个变量的初始值是不是你想要的。
下面是代码
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int pic(int n)
{
int row,col,cen;
int x=0,y=0,i;//用xy我比较容易分清楚行列
char a[130][130];
row=9+(n-1)*4;
col=9+(n-1)*4;//算出行列数
cen=(row-1)/2;//算出中心
//先把.放进数组
for(x=0;x<row;x++)
{
for(y=0;y<col;y++)
{
a[x][y]='.';
}
}
//给b区赋值
for(i=cen;i>0;i=i-2)
{
a[i][i]='$';
a[i-1][i]='$';
a[i][i-1]='$';
}
//给a区赋值
x=0;
for(y=0;y<=(cen-2);y=y+2)//在列上循环
{
x=x+2;//行开始的地方
for(i=x;i<=cen;i++)//在行中循环画多少个$
{
a[i][y]='$';
}
}
//给c区赋值
y=0;
for(x=0;x<=(cen-2);x=x+2)//在行上循环
{
y=y+2;//列开始的地方
for(i=y;i<=cen;i++)//在列中循环画多少个$
{
a[x][i]='$';
}
}
//开始对称赋值
//y轴对称
for(y=0;y<=cen;y++)
{
for(x=row-1;x>cen;x--)
{
a[x][y]=a[row-x-1][y];
}
}
//x轴对称
for(x=0;x<row;x++)
{
for(y=col-1;y>cen;y--)
{
a[x][y]=a[x][col-y-1];
}
}
//输出
for(x=0;x<row;x++)
{
for(y=0;y<col;y++)
{
printf("%c",a[x][y]);
}
printf("\n");
}
return 0;
}
int main() {
int n;
scanf("%d",&n);
pic(n);
return 0;
}