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>
char a[80][80];
char c,d,e;
int n;
void f(int v)
{
int i,j;
char t;
if(v%2==1)
t=c;
else
t=d;
for(i=v;i<=n+1-v;i++)
{
a[i][v]=t;
a[i][n+1-v]=t;
}
for(j=v;j<=n+1-v;j++)
{
a[v][j]=t;
a[n+1-v][j]=t;
}
}
int main()
{
int i,j,t,k=1;
while(scanf("%d %c %c",&n,&c,&d)!=EOF)
{
if(k!=1)
printf("\n");
if(n==1)
{
printf("%c\n",c);
continue;
}
t=n/2+1;
if(t%2==0)
{
e=c;c=d;d=e;
}
for(i=1;i<=t;i++)
f(i);
a[1][n]=a[1][1]=a[n][1]=a[n][n]=' ';
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%c",a[i][j]);
printf("\n");
}
k++;
}
}