叠筐问题
题目如下:
我们需要使用筐的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
输入描述:
输入是一个个的三元组,分别是,外筐尺寸n(n为满足1≤n≤79的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符,输入数据有多组。
输出描述:
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
我的思考:
这道题用二维数组处理图案,通过观察发现中间位置图案被周围的图案围住,然后交替用一种图案围住另一种图案,最外面的一圈要去掉四个角。代码中要注意第一个摞起来的筐和后面的筐要有一个换行符间隔。处理换行符的flag标记要定义在最外层循环的外面。
#include <iostream> int main() { int n = 0; char B, A; bool flag = true; while (scanf("%d %c %c", &n, &B, &A) != EOF) { char arr[80][80] = {0}; int x = n / 2, y = n / 2; char cur = B; if (flag == true) { flag = false; } else { printf("\n"); } for (int length = 1; length <= n; length += 2, x--, y--) { for (int i = x, j = y; j < length + y; j++) arr[i][j] = cur; for (int i = x, j = y; i < length + x; i++) arr[i][j] = cur; for (int i = x + length - 1, j = y; j < length + y; j++) arr[i][j] = cur; for (int i = x, j = y + length - 1; i < length + x; i++) arr[i][j] = cur; if (cur == B)cur = A; else cur = B; } if (n != 1) { arr[0][0] = ' '; arr[0][n - 1] = ' '; arr[n - 1][0] = ' '; arr[n - 1][n - 1] = ' '; } for (int i = 0; i < n; i++) { printf("%s\n", arr[i]); } } return 0; }