杭电oj-----叠筐
叠筐
题目链接: 杭电 2074
题目描述
需要的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
输入
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
输出
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
样例输入:
11 B A
5 @ W
样例输出:
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
代码:
#include <cstdio>
int main()
{
char grid[81][81];
int t,flag1=0;
char a,b;
while(scanf("%d %c %c",&t,&a,&b)!=EOF)
{
/////////////////////////////////////////////////////
if(flag1++)
printf("\n"); //格式控制^v^
/////////////////////////////////////////////////////
int m,n,i,j,flag=1;
char key;
m=(t+1)/2;//左边界
n=(t+1)/2;//右边界
//思路:
while(m) //从最中心向外扩张,每次扩张一圈
{
if(flag==1)
key=a;
else key=b;
///////////////////////////////////
for(i=m; i<=n; i++)
{
grid[m][i]=key;
grid[n][i]=key;
grid[i][n]=key;
grid[i][m]=key;
} //这里正在填数中---
///////////////////////////////////
m-=1;
n+=1;
//圈数外扩
flag*=-1;
}
if(t!=1)
grid[1][1]=grid[1][t]=grid[t][1]=grid[t][t]=' ';//注意t=1的情况,别让空格覆盖
/////////////////////////////////////////////////////
for(i=1; i<=t; i++)
{
for(j=1; j<=t; j++)
{
printf("%c",grid[i][j]); //输出
}
printf("\n");
}
/////////////////////////////////////////////////////
}
return 0;
}