題目描述
給定兩個整數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();
}
}
}