给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:
A B C D E F G H
V W X Y Z A B I
U J K L M N C J
T I H G F E D K
S R Q P O N M L
输入描述
M为行数,N为列数,其中M,N都为大于0的整数。
输出描述
分行输出相应的结果
输入例子
- 4 9
输出例子
A B C D E F G H I
V W X Y Z A B C J
U J I H G F E D K
T S R Q P O N M L
#include <iostream>
using namespace std;
char map[10000][10000];
int main()
{
int i, j, m, n, tot;
char ch = 'A';
cin >> m >> n;
for(i = 0; i < m; i++)
for (j = 0; j < n; j++)
map[i][j] = '0';
i = j = tot = 0;
map[i][j] = 'A';
while (tot < n*m-1){//注意这里的判断!
while (j+1 < n && map[i][j+1] == '0'){
if (ch >= 90) ch -= 26;
j = j + 1;
ch = ch + 1;
map[i][j] = ch;
tot = tot + 1;
}
while (i+1 < m && map[i+1][j] == '0'){
if (ch >= 90) ch -= 26;
i = i + 1;
ch = ch + 1;
map[i][j] = ch;
tot = tot + 1;
}
while (j-1 >= 0 && map[i][j-1] == '0'){
if (ch >= 90) ch -= 26;
j = j - 1;
ch = ch + 1;
map[i][j] = ch;
tot = tot + 1;
}
while (i-1 >= 0 && map[i-1][j] == '0'){
if (ch >= 90) ch -= 26;
i = i - 1;
ch = ch + 1;
map[i][j] = ch;
tot = tot + 1;
}
}
for (i = 0; i < m; i++){
for (j = 0; j < n; j++)
cout << " " << map[i][j];
cout << endl;
}
}