思想:
无论需要显示几行,都将所有83*83的方阵填满,根据需要从里边取出对应的方阵
而方阵是上下对称且左右对称的,因此,我们只需要写出左上四分之一的内容,其余对称复制过去就可以
此题的输入与输出格式容易出现问题,需要特别注意
#include<stdio.h>
int main(){
int n,count1,count2;
char B,A,final[83][83];
bool exchange=false;
while(scanf("%d %c %c",&n,&B,&A)!=EOF){
if(exchange)
{
printf("\n");
}
else
exchange=true;
//左上四分之一
for (int i=0;i<42;i++)
{
for (int j=0;j<42;j+=2)
{
final[i][j]=A;
final[i][j+1]=B;
}
}
for (int i=0;i<42;i++)
{
for (int j=0;j<42;j++)
{
if (j>i)
{
if (i%2==0)
{
final[i][j]=A;
}
else
{
final[i][j]=B;
}
}
}
}
//右上四分之一
for (int i=0;i<42;i++)
{
for (int j=0;j<41;j++)
{
final[i][82-j]=final[i][j];
}
}
//下边
for (int i=0;i<41;i++)
{
for (int j=0;j<82;j++)
{
final[82-i][j]=final[i][j];
}
}
//打印
final[41-n/2][41-n/2]=' ';
final[41-n/2][41+n/2]=' ';
final[41+n/2][41-n/2]=' ';
final[41+n/2][41+n/2]=' ';
if (n==1)
{
printf("%c",B);
printf("\n");
}
else
{
for (int i=41-n/2;i<=41+n/2;i++)
{
for (int j=41-n/2;j<=41+n/2;j++)
{
printf("%c",final[i][j]);
}
printf("\n");
}
}
}
return 0;
}