//叠筐 王道机试指南 P12
#include<cstdio>
char matrix[80][80];//最大二维数组 题目中说外框尺寸0<n<80
int main()
{
char a,b,c;
int i,j;
int n;
int flag=0;
int length;
while(scanf("%d %c %c",&n,&a,&b)!=EOF)
{
//要求叠筐与叠筐直接有一个空行
//第一次输入的时候,要求无空行,在之后再输入的时候就有空行
if(flag==0)
{
flag=1;
}
else
{
printf("\n");//这一段的意思是,在程序输入之前,先给定一个标志flag=0,第一次输入的时候,不输出空行,令flag=1,代表着第一次已完成
//当flag=1时,说明第一次已完成。后续再输入时,最开始先输出\n,保证第一个叠筐与第二个叠筐有空行
//本来想的是,输出完一个叠筐后,在之后加空行,但是题目中没有说最后一个叠筐后有空行,怕报错
//于是,转变思路,在叠筐输入后,在输出叠筐图案前加空行,保证最后一个叠筐后无空行
}
//一共有n行,令i表示行数,从0开始
for(i=0;i<=n/2;i++)
{
j=n-i-1;
length=n-2*i;
// if(i%2==0)//偶数圈 第0圈 第2圈 i=0 i=2 这个是错的,满足第一个例子,不满足第二个例子
// 并没有一开始想的那么简单
if ((n/2-i)%2==0)
c=a;
else
c=b;
//为数组赋值
for(int k=0;k<length;k++)
{
matrix[i][i+k]=c;
matrix[i+k][i]=c;
matrix[j][j-k]=c;
matrix[j-k][j]=c;
}
}
if(n!=1)
{
matrix[0][0]=' ';
matrix[0][n-1]=' ';
matrix[n-1][0]=' ';
matrix[n-1][n-1]=' ';
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%c",matrix[i][j]);
}
printf("\n");
}
}
return 0;
}
题目: