题目描述:把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错
// 叠筐
char matrix[80][80];
int main() {
int n;
char a, b;
bool firstCase = true;
while (scanf_s("%d %c %c", &n, &a,1, &b,1) != EOF) {
// 判断是否是第一组输入数据,否的话需要加空行
if (firstCase == true) {
firstCase = false;
}
else {
printf("\n");
}
// i代表从外向里数第几圈
for (int i = 0; i <= n / 2; ++i) {
int j = n - 1 - i;
int length = n - 2 * i;
char c;
// 花色由从内向外第几个圈决定的,最外圈为0圈,依次往内,偶数圈=中心花色,奇数圈=外框花色
// n/2-i=偶数,偶数圈=中心花色
if ((n / 2 - i) % 2 == 0) {
c = a;
}
// n/2-i为奇数,奇数圈=外框花色
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;
}
来源:计算机考研——机试指南(第2版)