`

矩阵对角线输出

 
阅读更多

链接:http://www.iteye.com/topic/1134016

题1:二维数组(N*N),沿对角线方向,从右上角打印到左下角如N=4: 

4*4数组 写道
{ 1 2 3 4 }
{ 5 6 7 8 }
{ 9 10 11 12 }
{13 14 15 16 }

 

要求打印出 写道
4
3 8
2 7 12
1 6 11 16
5 10 15
9 14
13

 

03 
02 13 
01 12 23 
00 11 22 33 
10 21 32 
20 31 
30 

 程序:

public class Tst {
	public static void main(String[] args) {
		int[][] arr = {
				{1,   2,  3,  4},
				{5,   6,  7,  8},
				{9,  10, 11, 12},
				{13, 14, 15, 16}};
		
		/**
		 * 
		 */
		for(int sum=0; sum<=7; sum++) {
			for(int i=0; i<=3; i++) {
				for(int j=0; j<=3; j++) {
					if( i + j == sum)
						System.out.print(i +""+ j + " ");
				}
			}
			System.out.println();
		}
		/*
00 
01 10 
02 11 20 
03 12 21 30 
13 22 31 
23 32 
33 
		 */
		
		System.out.println("************************************");
		for(int tmp=-3; tmp<=3; tmp++) {
			for(int i=0; i<=3; i++) {
				for(int j=0; j<=3; j++) {
					if( i-j == tmp)
						System.out.print(i +""+ j + " ");
				}
			}
			System.out.println();
		}

	}
}

 

输出结果 写道
00
01 10
02 11 20
03 12 21 30
13 22 31
23 32
33

************************************
03
02 13
01 12 23
00 11 22 33
10 21 32
20 31
30

 实际上就是两个对角线方式的输出:关键代码是

关键 写道
if( i + j == sum)

and

if( i-j == tmp)

找到i和j的关系。总共循环的次数。

如:
i+j
0 00
1 01 10
2 02 11 20
3 03 12 21 30
4 13 22 31
5 23 32
6 33

************************************
i-j
-3 03
-2 02 13
-1 01 12 23
0 00 11 22 33
1 10 21 32
2 20 31
3 30

 

2, 矩阵螺旋输出。http://www.cnblogs.com/wangyile/archive/2009/07/24/1530253.html
""
1.要旋转.所以要分四个方向.
2:每一圈都比上一圈小一格.
既然有了规律..自然算法也就出现了...
一个二维数组.
先是从行填写,方向是从小到大.然后是列填写,方向也是从小到大.
然后又是行填写,方向是从大到小,
最后是列填写,方向是从大到小.
下一圈,数组的行列,头部尾部都会比前面小1.然后再是循环....
""

直至数组的行列其中的一个首尾相等...

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics