链接: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 }
{ 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
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
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
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.然后再是循环....
""
直至数组的行列其中的一个首尾相等...