基本思想是不断覆盖之前赋值的从c[i][j]
#include<stdio.h>
int main()
{
int n,i,j,k,w,cover,sign=0; //n为奇整数,w看一下有多少层 ,cover代表覆盖次数
char a[2],flag,c[100][100];//输入尺寸n 中心花色字符a[0],外筐花色字符a[1]
while(scanf("%d %c %c",&n,&a[0],&a[1])!=EOF)
{
if(sign!=0)
printf("\n");
sign++;
if(n%2==0||n<=0||n>=80)return 0;
//覆盖赋值
k=1;flag=a[0];
w=(n+1)/2;
for(cover=1;cover<=w;cover++)
{
for(i=k;i<=n-k+1;i++)
{
for(j=k;j<=n-k+1;j++)
{
if(w%2==0)//说明最外层是外筐花色
{
c[i][j]=flag==a[0]?a[1]:a[0];
}
else//偶数最外层为中心花色
{
c[i][j]=flag;
}
}
}
flag=flag==a[1]?a[0]:a[1];
k++;
}
if(n==1)
printf("%c\n",c[1][1]);
else
{
c[1][1]=' ';c[1][n]=' ';c[n][1]=' ';c[n][n]=' ';
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%c",c[i][j]);
}
printf("\n");
}
}
}
return 0;
}