資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
利用字母可以組成一些美麗的圖形,下面給出了一個例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個5行7列的圖形,請找出這個圖形的規律,並輸出一個n行m列的圖形。
輸入格式
輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。
輸出格式
輸出n行,每個m個字符,為你的圖形。
樣例輸入
5 7
樣例輸出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
BABCDEF
CBABCDE
DCBABCD
EDCBABC
數據規模與約定
1 <= n, m <= 26。
思路:首先觀察樣例圖形,不難得出規律:第一行和第一列都是按照從A往后遞增的順序排列,而其他行則是從第一個字母開始遞減直到A,若此時還沒到m的限制大小,則再從A開始遞增。所以分成3塊處理:第一行,第一列,中間。
1 #include<iostream> 2 using namespace std; 3 int main(void) 4 { 5 int n, m; 6 cin >> n >> m; 7 char(*arr)[26] = new char[n][26]; 8 for (int i = 0; i < n; i++) //把每一行第一個字母初始化(第一列單列) 9 { 10 arr[i][0] = 'A' + i; 11 } 12 for (int j = 0; j < m; j++) //第一行單列 13 { 14 arr[0][j] = 'A' + j; 15 } 16 for (int i = 1; i < n; i++) //中間的字母 17 { 18 for (int j = 0; j < m;j++) 19 { 20 arr[i][j] = arr[i][0] - j; 21 if (arr[i][j] == 'A') 22 { 23 for (; j < m - 1; j++) 24 { 25 arr[i][j + 1] = arr[i][j] + 1; 26 } 27 } 28 } 29 } 30 for (int i = 0; i < n; i++) 31 { 32 for (int j = 0; j < m; j++) 33 { 34 cout << arr[i][j]; 35 } 36 cout << endl; 37 }
38 delete[]arr; 39 return 0; 40 }
注意:一定要嚴格控制好每個循環里面的判斷條件,不要造成數組越界或沒有初始化的問題。