图形排版题有两类,一类是行列下标规律性强,可直接通过行列下标的数学表达式打印出来;另一类是行列下标规律性不强,必须先构造完二维数组,才能打印。后者较为复杂,叠筐问题就属于后者。
题目描述
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
输入
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符。
输出
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。

思路很简单,类似于下围棋,以@和W为例
n=1时,输出:
@
n=3时,输出:
W
W@W
W
虽然思路简单,但是编写代码比较耗时,因为本题规律的细节还是比较多的,建议多加练习,熟能生巧。
C语言代码如下:
#include <stdio.h>
int main()
{
int n;
char a,b;
char matrix[80][80];
while(scanf("%d %c %c",&n,&a,&b)!=EOF){
//1.从外向内构造
for(int i=0;i<=n/2;i++){
int j=n-1-i;
int length=n-2*i;
char c;
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]=' ';
}
//2.输出
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%c",matrix[i][j]);
}
printf("\n");
}
}
return 0;
}