题目描述
给定两个整数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的整数。
输出
分行输出相应的结果,注意每行开始有1个空格,相邻两个字母之间有1个空格
样例输入
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
【AC代码】:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int i = 0, j = 0;
int height =sc.nextInt() ;
int width = sc.nextInt();
int[][] a = new int[height][width];
int m = 1, s = 1,sum=1;
int x1 = 0;int y1 = 0;//左上边界
int x2 = height;int y2 = width;//右下边界
while (true) {
if (s == 1) {
/*从左至右*/
for (; j < y2; j++) {
if(m==27)
m=1;//达到Z后一个变为A
sum++;//计算总数
a[i][j] = m++;
}
j--;i++;y2--;
/*从上至下*/
for (; i < x2; i++) {
if(m==27)
m=1;
sum++;
a[i][j] = m++;
}
i--;j--;x2--;
s = -1;
} else {
/*从右至左*/
for (; j >= y1; j--) {
if(m==27)
m=1;
sum++;
a[i][j] = m++;
}
j++;i--;y1++;
/*从下至上*/
for (; i >= x1 + 1; i--) {
if(m==27)
m=1;
sum++;
a[i][j] = m++;
}
i++;j++;x1++;
s = 1;
}
if (sum > height * width)
break;
}
for (i = 0; i < height; i++) {
for (j = 0; j <width; j++)
System.out.print(" "+(char)(a[i][j]+'A'-1));
System.out.println();
}
}
}