您的位置:首页 > 其它

Write a routine that prints out a 2-D array in spiral order

2012-04-05 21:58 169 查看
我的理解,给定2维数组

1 2 3三角形判断

8 9 4

7 6 5

“螺旋式”顺序输出:1 2 3 4 5 6 7 8 9

private   static   void  PrintNumberasSpiralOrder()
{
// 1  2  3   4
// 12 13 14  5
// 11 16 15  6
// 10 9   8  7

// 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
int [,] a  =   new   int [,]
{   {  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  }  } ;
// int[,] a = new int[,] { { 1, 2, 3, 4 }, { 12, 13, 14, 5 }, { 11, 16, 15, 6 }, { 10, 9, 8, 7 } };
// int[,] a = new int[,] { { 1, 2 }, {4,3} };
const   int  N  =   5 ;
//  spiral
for  ( int  i  =  N  -   1 , j  =   0 ; i  >   0 ; i -- , j ++ )
{
// i 从最大维度数开始
// j 从最小维度数开始
// i--来缩小范围
// j++来缩小范围
// k 增长缩小因子
for  ( int  k  =  j; k  <  i; k ++ )
System.Console.Write( " {0}  " , a[j, k]); Console.WriteLine( "" );
for  ( int  k  =  j; k  <  i; k ++ )
System.Console.Write( " {0}  " , a[k, i]); Console.WriteLine( "" );
for  ( int  k  =  i; k  >  j; k -- )
System.Console.Write( " {0}  " , a[i, k]); Console.WriteLine( "" );
for  ( int  k  =  i; k  >  j; k -- )
System.Console.Write( " {0}  " , a[k, j]); Console.WriteLine( "" );
}
//  special case for middle element if N is odd
// 如果是奇数,则要条印中间的数。
if  (N  %   2   ==   1 ) System.Console.Write(a[(N  -   1 )  /   2 , (N  -   1 )  /   2 ]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐