思路1:
先设法输出前缀(逆序的部分), 再输出后面的部分. 特别要小心范围.
1 #include <iostream> 2 using namespace std; 3 4 char letters[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 5 6 int main() 7 { 8 ios::sync_with_stdio(false); 9 cin.tie(0); 10 11 int n, m; 12 cin >> n >> m; 13 for (int i = 0; i < n; i++) { 14 for (int pre = 0; pre < min(i, m); pre++) 15 cout << letters[i - pre]; 16 for (int suf = 0; suf < m - i; suf++) 17 cout << letters[suf]; 18 cout << endl; 19 } 20 21 return 0; 22 }
思路2:
更深一步找规律会发现, 在矩阵中, 同一字母对应的横纵坐标之差的绝对值是相等且唯一的. 可用两重循环枚举所有坐标, 计算坐标差, 再输出对应的字符.
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 char letters[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 6 7 int main() 8 { 9 ios::sync_with_stdio(false); 10 cin.tie(0); 11 12 int n, m; 13 cin >> n >> m; 14 for (int x = 0; x < n; x++) { 15 for (int y = 0; y < m; y++) 16 cout << letters[abs(x - y)]; 17 cout << endl; 18 } 19 20 return 0; 21 }
原文:https://www.cnblogs.com/AntonLiu/p/12247025.html