// 叠筐
#include <stdio.h>
#include <string.h>
using namespace std;
int main() {
int n;
char in, out;
char pattern[100][100] = { 0 };
while (scanf("%d %c %c", &n, &in, &out) != EOF) {
memset(pattern, 0, 10000); // 初始化100x100=10000
int layer = 0; // 0 -> n/2
char current = in;
for (layer = 0; layer <= n / 2; ++layer) {
// 左上 n/2-layer,n/2-layer
// 右上 n/2-layer,n/2+layer
// 左下 n/2+layer,n/2-layer
// 右下 n/2+layer,n/2+layer
//打印上边
for (int x = n / 2 - layer, y = n / 2 - layer; y <= n / 2 + layer; ++y) {
pattern[x][y] = current;
}
// 打印左边
for (int x = n / 2 - layer, y = n / 2 - layer; x <= n / 2 + layer; ++x) {
pattern[x][y] = current;
}
// 打印下边
for (int x = n / 2 + layer, y = n / 2 - layer; y <= n / 2 + layer; ++y) {
pattern[x][y] = current;
}
// 打印右边
for (int x = n / 2 - layer, y = n / 2 + layer; x <= n / 2 + layer; ++x) {
pattern[x][y] = current;
}
if (in == current) {
current = out;
}
else {
current = in;
}
// 去掉四个角
if (n != 1) {
pattern[0][0] = ' ';
pattern[0][n-1] = ' ';
pattern[n-1][0] = ' ';
pattern[n-1][n-1] = ' ';
}
}
for (int i = 0; i < n; ++i) {
printf("%s\n", pattern[i]);
}
printf("\n");
}
return 0;
}
来源:王道计算机考研机试指南