蓝桥杯 输出米字形 输出图案

问题描述

根据输入的正整数n ,输出一个米字形图案。米字形由一个(2n-1)*(2n-1)的矩阵组成,矩阵包含从大写A开始的n个字母
  例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。
  矩阵的正中间为n个字母中字典序最大的那个,从这个字母开始,沿着西北、正北、东北、正西、正东、西南、正南、东南八个方向各有一条由大写字母组成的直线。并且直线上的字母按字典序依次减小,直到大写字母A。
  矩阵的其它位置用英文句号.填充。
样例输入一
3
样例输出一
A.A.A
.BBB.
ABCBA
.BBB.
A.A.A
样例输入二
4
样例输出二
A..A..A
.B.B.B.
..CCC..
ABCDCBA
..CCC..
.B.B.B.
A..A..A

8个for循环,每个for循环控制一个方向。可以先把8个for循环全部注释掉,然后把for循环1放出来,运行一下,再把for循环1和2放出来,运行一下,一直到8个全放出来,方便理解。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 char g[60][60];
 4 int main() {
 5     memset(g, '.', sizeof g);
 6     int n;
 7     cin >> n;
 8     for (int i = n; i >= 1; i--) { //1
 9         g[i - 1][i - 1] = 'A' + i - 1;
10     }
11     for (int i = 0, j = n - 1; i <= n - 1; i++) { //2
12         g[i][j] = 'A' + i;
13     }
14     for (int i = 0, j = 2 * n - 2; i <= n - 1; i++, j--) { //3
15         g[i][j] = 'A' + i;
16     }
17     for (int i = n - 1, j = 0; j <= n - 1; j++) { //4
18         g[i][j] = 'A' + j;
19     }
20     for (int i = n - 1, j = 2 * n - 2; j >= n - 1; j--) { //5
21         g[i][j] = 'A' - j + 2 * n - 2;
22     }
23     for (int i = 2 * n - 2, j = 0; i >= n - 1; i--, j++) { //6
24         g[i][j] = 'A' - i + 2 * n - 2;
25     }
26     for (int i = 2 * n - 2, j = n - 1; i >= n - 1; i--) { //7
27         g[i][j] = 'A' - i + 2 * n - 2;
28     }
29     for (int i = 2 * n - 1, j = 2 * n - 1; i >= n - 1; i--, j--) { //8
30         g[i][j] = 'A' - i + 2 * n - 2;
31     }
32     for (int i = 0; i < 2 * n - 1; i++) { //输出 
33         for (int j = 0; j < 2 * n - 1; j++) {
34             cout << g[i][j];
35         }
36         cout << endl;
37     }
38     return 0;
39 }
原文地址:https://www.cnblogs.com/fx1998/p/12680553.html