【顺时针打印矩阵】
2014-04-08 20:09
295 查看
写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
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
从昨天下午开始做题,一下午做出来9道,然后就剩这一个题。今天又做了一下午,终于把这最后一道做出来了
* 思路是这样的:
* 把打印结果看成大圈套小圈
* n=2打印1圈,n=3打印2圈,n=4打印两圈,n=5打印3圈,一共(n+1)/2圈------------->这是最外层的for循环,从0到(n+1)/2
* 一圈分四次打印:
* 第一次从左往右打印最上面一排,第二次从上往下打印最右边一排去掉最上面一个和最下面一个
* 第三次从右往左打印最下面一排,第四次从下往上打印最左边一排,去掉最下面一个和最上面一个
* 打印完一圈再往里打印第二圈知道打印完为止
* 矩阵分两种:
*一种中间有一个数
*一种中间是一个圈
* 如果矩阵之间只有一个数,比如5的矩阵,它的停止条件是num==n*n+1
* 矩阵中间是一个圈,停止条件看m
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
从昨天下午开始做题,一下午做出来9道,然后就剩这一个题。今天又做了一下午,终于把这最后一道做出来了
* 思路是这样的:
* 把打印结果看成大圈套小圈
* n=2打印1圈,n=3打印2圈,n=4打印两圈,n=5打印3圈,一共(n+1)/2圈------------->这是最外层的for循环,从0到(n+1)/2
* 一圈分四次打印:
* 第一次从左往右打印最上面一排,第二次从上往下打印最右边一排去掉最上面一个和最下面一个
* 第三次从右往左打印最下面一排,第四次从下往上打印最左边一排,去掉最下面一个和最上面一个
* 打印完一圈再往里打印第二圈知道打印完为止
* 矩阵分两种:
*一种中间有一个数
*一种中间是一个圈
* 如果矩阵之间只有一个数,比如5的矩阵,它的停止条件是num==n*n+1
* 矩阵中间是一个圈,停止条件看m
package com.itheima.test9; public class Test9 { public static void main(String[] args) { int[][] a=myMethod(5); for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ switch ((a[i][j]+"").length()) { case 1: System.out.print(a[i][j]+" "); break; case 2: System.out.print(a[i][j]+" "); break; case 3: System.out.print(a[i][j]+" "); break; } } System.out.println(); } } public static int[][] myMethod(int n){ //初始化用来存放n阶矩阵的数组 int[][] a=new int ; //定义计数器从1开始 int num=1; //这个m是第几个圈的意思 mark: for(int m=0;m<(n+1)/2;m++){ //从左往右打印最上面一排 for(int i=m;i<=n-1-m;i++){ a[m][i]=num++; if(num==n*n+1) break mark; } //从上往下打印最右边一排去掉最上面一个和最下面一个 for(int j=1+m;j<=n-2-m;j++){ a[j][n-1-m]=num++; } //右往左打印最下面一排 for(int k=n-1-m;k>=m;k--){ a[n-1-m][k]=num++; } //从下往上打印最左边一排,去掉最下面一个和最上面一个 for(int l=n-2-m;l>=1+m;l--){ a[l][m]=num++; } } return a; } }
相关文章推荐
- C#学习
- C plus plus 控制格式
- 高质量C/C++编程之文件结构
- Oracle 数据库实例启动关闭过程
- 用线性组合表示两个数的最大公约数
- 谷歌将推出智能电视Android TV
- 谷歌将推出智能电视Android TV
- hadoop2.0 federation与HA的配置
- POJ 2385 Apple Catching (DP)
- 1
- 2014年3月份 月会
- Windows Phone-框架结构和启动过程
- android jni中C++与java互相调用小结
- Oracle sqlplus 常用设置
- Oracle实例精解-第一章阅读笔记
- shell——cat,find,xargs,tr,sort,grep
- 调用库函数进行的qsort快速排序
- POJ 1742
- 静态数组表示的有限状态机
- OpenCV中图像旋转(warpAffine)算法的实现过程