天天看點

藍橋杯-螺旋數列藍橋杯-螺旋數列

藍橋杯-螺旋數列

【問題描述】

對于一個 n 行 m 列的表格,我們可以使用螺旋的方式給表格依次填上正整數,我們稱填好的表格為一個螺旋矩陣。

例如,一個 4 行 5 列的螺旋矩陣如下:

1 2 3 4 5

14 15 16 17 6

13 20 19 18 7

12 11 10 9 8

【輸入格式】

輸入的第一行包含兩個整數 n, m,分别表示螺旋矩陣的行數和列數。

第二行包含兩個整數 r, c,表示要求的行号和列号。

【輸出格式】

輸出一個整數,表示螺旋矩陣中第 r 行第 c 列的元素的值。

【樣例輸入】

4 5

2 2

【樣例輸出】

import java.util.Scanner;
public class 螺旋數列 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		System.out.println("please input n&&m:");
		int n = sc.nextInt();
		int m = sc.nextInt();
		System.out.println("please input r&&c:");
		int r = sc.nextInt();
		int c = sc.nextInt();
		int num = 1;
		int up = 0,down = n,left = 0,right = m;
		int a[][] = new int [n][m];
        //開始順時針構造數列
	    while(true){
            //從第up行開始構造  第一步:
	    	for(int H = left;H<right;H++){
	    		a[up][H] = num++;
	    	}
            /*
            此時第一列已經構造完成,如果接着構造最右邊一列需要從up+1那一行按順序向下開始
            因為第up行已經指派過了
            構造原理如下圖所示
            */
	    	up++;
	    	if(up==down)
	    		break;
             //然後按順序構造最右邊的一列   第二部:
	    	for(int L=up;L<down;L++){
	    		a[L][right-1] = num++;
	    	}
	    	right--;
	    	if(left==right)
	    		break;
            //構造最後一行  第三步:
	    	for(int H=right-1;H>=left;H--){
	    		a[down-1][H] = num++;
	    	}
	    	down--;
	    	if(up==down)
	    		break;
            //構造最左側數列   第四步:
	    	for(int L=down-1;L>=up;L--){
	    		a[L][left] = num++;
	    	}
	    	left++;
	    	if(left==right)
	    		break;
	    }//OVER
	    System.out.println(a[r-1][c-1]);

	}

}

           

構造原理(圖解):

藍橋杯-螺旋數列藍橋杯-螺旋數列

運作結果如下所示:

輸入資料和輸出資料提示語在送出的時候去掉,因為不符合輸出格式

藍橋杯-螺旋數列藍橋杯-螺旋數列