YTU OJ 3232: 字母旋轉方陣

題目描述

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章