题目描述:如何给一个N*M的矩阵输出一个逆时针螺旋读取的元素;
在题目看完时;就想起的程序员面试金典这本书里面一道类似的题目;原题要求是实现N*N矩阵元素的旋转换位;相比这道题不同之处在于,(1)矩阵的形状变的更随意了;(2)矩阵层次感还是一样的;(3)原来的元素值交换成了赋值;
其中可借鉴的思想:矩阵的层次性,元素存储过程/步骤;
1 package shounue; 2 import java.util.Scanner; 3 public class snakeArrays { 4 public static void main(String[] args){ 5 Scanner in = new Scanner(System.in); 6 int column = in.nextInt(); 7 int row = in.nextInt(); 8 int [][] arrays = new int [row][column]; 9 int layers = 0; 10 int reallayer = 0; 11 int count = 1; 12 if(column < row) layers =((column % 2) == 0 ? (column/2) : (column/2 +1)); 13 else layers =((row % 2) == 0 ? (row/2) : (row/2 +1)); 14 System.out.println(layers); 15 for(;reallayer < layers; reallayer++){ 16 int i, j; //分别是行标记器和列标记器 17 for(i = reallayer; i < column - reallayer; i++)//上赋值 18 arrays[reallayer][i] = count++; 19 i--; 20 for(j = reallayer + 1; j < row - reallayer; j++)//右赋值 21 arrays[j][i] = count++; 22 j--; 23 for(i--;i >= reallayer; i--) //下赋值 24 arrays[j][i] = count++; 25 i++; 26 for(j--; j > reallayer; j--) 27 arrays[j][i] = count++; 28 } 29 for(int y = 0; y < row; y++) 30 {for(int x = 0 ; x < column; x++) 31 { 32 System.out.print(arrays[y][x]); 33 System.out.print(" "); 34 } 35 System.out.println(); 36 } 37 } 38 }