解题思路:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char outPutBuf[82][82]; //用于排版后的输出缓存
int firstCase = 1; //是否为第一组数据标志,初始值为true
char a, b; //输入的两个字符
int n; //叠框的大小
int i, j, k;
freopen("debug\\inchar.txt", "r", stdin); //重定义输入
while(scanf("%d %c %c", &n, &a, &b) == 3){ //scanf的返回值为正常赋值的个数,输入文件到达末尾或在命令台输入中输入ctrl+z退出
if(firstCase == 1) //是第一组数据
firstCase = 0; //修改数据标志
else
printf("\n"); //输出空行
for(i = 1, j = 1; i <= n; i += 2, j++){ //从里只外输出每个圈吗,每多一圈,每行中字符的个数+2
//j表示现在是从内往外第几行,i表示当前圈一行有多少个字符
int x = n / 2 + 1, y = x;
x -= j - 1, y = x; //计算每个圈右上角的坐标
char c = j % 2 == 1 ? a : b; //计算每一圈用哪个字符
for(k = 1; k <= i; k++){ //对当前圈进行赋值
outPutBuf[x + k - 1][y] = c; //对左边赋值
outPutBuf[x][y + k - 1] = c; //对上边赋值
outPutBuf[x + k - 1][y + i - 1] = c; //对右边赋值
outPutBuf[x + i - 1][y + k - 1] = c; //对下边赋值
}
}
if( n != 1){ //n等于1的时候不需要赋值
outPutBuf[1][1] = ' '; //将最外层四个角置为空格
outPutBuf[n][1] = ' ';
outPutBuf[1][n] = ' ';
outPutBuf[n][n] = ' ';
}
for( i = 1; i <= n; i++){ //输出已经排好版的数据
for( j = 1; j <= n; j++)
printf("%c", outPutBuf[i][j]);
printf("\n");
}
}
return 0;
}