螺旋队列(由外向里)

给定n,输出一个n*n的矩阵,矩阵元素排列如下(假设n=5)

1    2    3    4    5

16  17  18  19  6

15  24  25  20  7

14  23  22  21  8

13  12  11  10  9

分析:

n=5,共需要n/2=2次循环

对第一圈

输出:1   2    3    4

输出:5   6    7    8

输出:9   10  11  12

输出:13 14  15  16

对第二圈

输出:17  18

输出:19  20

输出:21  22

输出:23  24

n%2==1时候,单独处理(n/2,n/2)的元素

输出25

Java源码如下

import java.io.*; public class ScrewMatrix { /** * @param args * @throws IOException * @throws NumberFormatException */ public static void main(String[] args) throws NumberFormatException, IOException { // TODO Auto-generated method stub int size; BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Input the matrix's size: "); size=Integer.parseInt(in.readLine()); int a[][]=new int [size][size]; //Initialize for(int i=0;i<size;i++) for(int j=0;j<size;j++) a[i][j]=0; int num=1,i,j; //Calculate for(i=0;i<size/2;i++){ //矩阵的尺寸为size×size的话,则需要循环size/2次,每次初始化一个圈 //计算圈上面的元素 for(j=i;j<size-i-1;j++){ a[i][j]=num++; } //计算圈右面的元素 for(j=i;j<size-i-1;j++){ a[j][size-i-1]=num++; } //计算圈下面的元素 for(j=size-i-1;j>i;j--){ a[size-i-1][j]=num++; } //计算圈左面的元素 for(j=size-i-1;j>i;j--){ a[j][i]=num++; } } //如果size为基数,则需要单独处理最中间的元素 if(size%2==1) a[size/2][size/2]=num; //print for(i=0;i<size;i++){ for(j=0;j<size;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } } }

参考文献《程序员面试宝典》

你可能感兴趣的:(String,面试,Class,input,import,Matrix)