#include <stdio.h>
#include <string.h>
int main()
{
int n,v,j,i,k,w=0;
char s[100][100],u,a,x,y;
while(scanf("%d",&n)!=EOF){
w++;
getchar();
scanf("%c",&x);
getchar();
scanf("%c",&y);
if(n==1){
if(w!=1)printf("\n");
printf("%c\n",x);
//printf("\n");
continue;
}
k=n/2+1;//xÊÇ×îÍâȦ
if(n/2%2!=0){
a=x;
x=y;
y=a;
}
for(i=1;i<=n;i++){
if(i%2==0)s[k][i]=y;
else s[k][i]=x;
s[i][0]=1;
}
//printf("\n");
j=1;
for(i=n/2;i>=1;i--){
strcpy(s[i],s[i+1]);
if(i%2!=0)u=x;
else u=y;
for(v=k-j;v<=k+j;v++)s[i][v]=u;
j++;
}
s[1][1]=s[1][n]=' ';
if(w!=1)printf("\n");
for(i=1;i<=n/2;i++){
for(j=1;j<=n;j++){
printf("%c",s[i][j]);
}
printf("\n");
}
for(j=1;j<=n;j++){
printf("%c",s[k][j]);
}
printf("\n");
for(i=n/2;i>=1;i--){
for(j=1;j<=n;j++){
printf("%c",s[i][j]);
}
printf("\n");
}
//printf("\n");
}
return 0;
}
首先,如果n/2是奇数,则最外层花色与中心花色不同,若为偶数则相同,单独处理第一行
先在数组中储存n/2+1行的字符串 然后从n/2行向上处理到第2行
对于第k行,每次先复制第k+1行的字符串,然后再修改(不太好描述,直接看代码
因为叠筐关于第n/2+1行对称,所以先正序输出前n/2行,再倒序输出