链接: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.然后再是循环....
""

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