图形排版--叠筐问题
题目描述:把一个个大小差一圈的筐叠上去,使得从上往下看时,边框花色交错。
输入:是一个三元组,(外框尺寸n,中心花色字符,外框花色字符),n是>0且<80的奇整数,后二者都是ASCII可见字符。
输出:图案中心花色和外框花色字符从内层起交错相叠,多筐相叠时,最外框的角总是被打磨掉。叠框与叠框之间应有一层间隔。
输入样例1:11 B A
输出样例1:
输入样例2:5 # w
输出样例2:
#include<iostream> using namespace std; char arr[80][80]; int main() { int n; //筐的尺寸 char a, b; //a是中心花色字符,b是外框花色字符 cin >> n >> a >> b; //先填充成一个正方形图案,从内圈往外圈填充 for (int k = 0; k <= n / 2; k++) {//记录当前是第几层,最内层为第0层,依次往外递增 char c; //第k层填充的字符 if (k % 2 == 1) { c = b; //k是奇数,填外筐花色字符 } else { c = a; //k是偶数,填中心花色字符 } //填充每一层的左筐和右筐 for (int i = n / 2 - k; i <= n / 2 + k; i++) { arr[i][n / 2 - k] = c; //左筐 arr[i][n / 2 + k] = c; //右筐 } //填充每一层的上筐和下筐 for (int j = n / 2 - k + 1; j <= n / 2 + k - 1; j++) { arr[n / 2 - k][j] = c; //上筐 arr[n / 2 + k][j] = c; //下筐 } } //删除整个图案四个角上的字符,置为空格 arr[0][0] = ' '; arr[0][n-1] = ' '; arr[n-1][0] = ' '; arr[n-1][n-1] = ' '; //打印输出,间隔一行 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << arr[i][j]; } cout << endl<<endl; } return 0; }