Problem Description
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
Input
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
Output
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
Sample Input
11 B A
5 @ W
Sample Output
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
#include<stdio.h>
#include<string.h>
int n;
char a[3];
char k[81][81];
int b=1;
int ok=0;
void main()
{
while(scanf("%d",&n)!=EOF)
{
if(ok++)
printf("\n");
memset(k,0,sizeof(k));
getchar();
scanf("%c",&a[0]);
getchar();
scanf("%c",&a[1]);
int t=2;
int ctr=(n+1)/2;
k[1][1]=k[1][n]=k[n][1]=k[n][n]=' ';
k[ctr][ctr]=a[0];
int f=1;
for(int i=ctr-1;i>=1;i--)
{
for(int j=i;j<=i+t;j++)
{
for(int l=j;l<=i+t;l++)
{
if(!k[j][l])
{
k[j][l]=a[f%2];
}
}
}
t+=2;
f++;
}
if(n==1)
{
printf("%c\n",a[0]);
continue;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i>j)
printf("%c",k[j][i]);
else
printf("%c",k[i][j]);
}
printf("\n");
}
}
}
这个格式超神奇哎。反正我自己是没做出来,我也想不明白两个叠筐之间要有空行,为什么不能在后面加\n,而一定要在前面加\n.
还有要小心n=1的时候的情况。
我大概思路就是从最中心填起,然后用三次循环,把周围的一圈圈全部填起来。