传送门
水题 但是训练赛最后十分钟没写出来
当时想着找到每行的规律 ,一行一行输出,然后结束了都没写出来。
后来,想到用二维数组输出,找到中心图案,逐层向外扩展替代图案,然后又wa了,n=1 单独考虑,又交一发pe,搜题解才知道怎么输出。
上代码
#include<bits/stdc++.h>
using namespace std;
char map[85][85];
int main()
{
int n;
char a,b,c;
int q=0;//用来控制输出
while(cin>>n>>a>>b)
{
if(q)//第一行直接输出图案,之后每一次输入先换一行,达到上下有一行间隔
printf("\n");
q++;
map[n/2][n/2]=a;//中心图案为a
if(n>2)
{
for(int i=1;i<=n/2;i++)//向外扩展n/2次
{
if(i%2==1)//扩展奇数为b图案
c=b;
else//偶数为a图案
c=a;
for(int j=n/2-i;j<=n/2+i;j++)//替换中心图案四周
{
map[i+n/2][j]=map[n/2-i][j]=c;//中心图案上下行
map[j][n/2+i]=map[j][n/2-i]=c;//左右列
}
}
map[0][0]=' ';
map[0][n-1]=' ';
map[n-1][0]=' ';
map[n-1][n-1]=' ';//把四个角磨掉
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
printf("%c",map[i][j])
printf("\n");
}
else//n==1时直接输出图案a
printf("%c\n",a);
}
return 0;
}