打印蛇形数组——两种结构

来源:互联网 发布:linux hello world 编辑:程序博客网 时间:2024/06/05 17:18

打印如下格式的数据:


解题思路:先将矩阵变一下形状


public static void main(String[] args) {// TODO Auto-generated method stubint n=5;int [] []a=new int[n][n];int [] []b=new int[2*n][n];int num=0;//构造三角阵数形for(int i=0;i<n-1;i++){for(int j=0;j<=i;j++){num++;b[i][j]=num;} } for(int i=n-1;i<2*n-1;i++) { for(int j=0;j<2*n-1-i;j++) { num++; b[i][j]=num; } } //奇数行进行逆序排序 for(int i=0;i<n;i+=2) //第0、2、4行 { int temp=0; for(int j=0;j<=i/2;j++) { temp=b[i][j]; b[i][j]=b[i][i-j]; b[i][i-j]=temp;  } }  for(int i=(n+1)/2*2;i<2*n-1;i+=2) //第6、8行 { int temp=0; for(int j=0;j<(2*n-1-i)/2;j++) { temp=b[i][j]; b[i][j]=b[i][2*n-2-i-j]; b[i][2*n-2-i-j]=temp; } }   //打印b[][] for(int i=0;i<n-1;i++){for(int j=0;j<=i;j++){System.out.print(b[i][j]+" ");}System.out.println();} for(int i=n-1;i<2*n-1;i++) { for(int j=0;j<2*n-1-i;j++) { System.out.print(b[i][j]+" "); } System.out.println(); }//按照斜线将数填回原矩阵 for(int i=0;i<n;i++) { for(int j=0;j<=i;j++) { a[i-j][j]=b[i][j]; } }  for(int i=n;i<2*n-1;i++) { for(int j=i-n+1;j<n;j++) { a[i-j][j]=b[i][j-i+n-1]; } }  for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } }

输出二维蛇形矩阵,格式如下:

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 

public static void main(String[] args) {int n=5;int [][]a=new int [n][n];int count=1;if(n==1){a[0][0]=count;}else{for(int i=0;i<n/2;i++){/* 以下循环执行后输出如下:             1 2 3 4 5  */  for(int j=i;j<n-i;j++){a[i][j]=count;count++;} /* 以下循环执行后输出如下:             1 2 3 4 5                     6                     7                     8   */  for(int k=i+1;k<n-i-1;k++){a[k][n-i-1]=count;count++;} /* 以下循环执行后输出如下:             1  2  3  4  5                         6                         7                         8             13 12 11 10 9            */  for(int m=n-i-1;m>i;m--){a[n-i-1][m]=count;count++;} /* 以下循环执行后输出如下:             1  2  3  4  5             16          6             15          7             14          8             13 12 11 10 9         */  for(int w=n-i-1;w>i;w--){a[w][i]=count;count++;}}  /* 上面的大循环执行后输出如下:             1  2  3  4  5             16 17 18 19 6             15 24    20 7             14 23 22 21 8             13 12 11 10 9         */  if(n%2 == 1){          //如果n值奇数,将最中间的空填上          a[n/2][n/2] = count;      }  }//打印矩阵for(int i=0;i<n;i++){for(int j=0;j<n;j++){System.out.print(a[i][j]+" ");}System.out.println();}}


0 0
原创粉丝点击