链接: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, 矩阵螺旋输出。
""
1.要旋转.所以要分四个方向.
2:每一圈都比上一圈小一格.
既然有了规律..自然算法也就出现了...
一个二维数组.
先是从行填写,方向是从小到大.然后是列填写,方向也是从小到大.
然后又是行填写,方向是从大到小,
最后是列填写,方向是从大到小.
下一圈,数组的行列,头部尾部都会比前面小1.然后再是循环....
""
直至数组的行列其中的一个首尾相等...