问题描述
根据输入的正整数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