生成变换方向矩阵

如上图所示,本文的主要目的是生成一个这样按红线顺序从1,2,3,4,5,6,...的不断变换螺旋方向的螺旋矩阵。

此种矩阵是前几天华为面试的时候提出来的,当时只是给出了一个解决方法,并没有写实现代码,今天有时间整理一下把代码写出来供大家分享。

算法思路:

根据每一个奇数首行和偶数首列为平方数的特点,分别以这点位依据去填充数据。

 程序输出:

 

 

C#代码如下: 

ExpandedBlockStart.gif 代码
 1  using  System;
 2  using  System.Collections.Generic;
 3 
 4  namespace  spiral_matrix
 5  {
 6       class  Program
 7      {
 8           static   int [,] getMatrix( int  n)
 9          {
10               // 返回一个生成好的螺旋矩阵
11               int [,] mymatrix  =   new   int [n, n];
12               for  ( int  i  =   0 ; i  <  n;i ++  )
13              {
14                   int  tmp = (i + 1 ) * (i + 1 );      // 作为当前i的平方
15                   if  (i  %   2   ==   0 )
16                  {
17                       // i从0开始,所以此时行数为奇数
18                       for  ( int  m  =   0 ; m  <=  i; m ++ )
19                      {
20                          mymatrix[m, i]  =  tmp  -  m;
21                           if  (i  +   1   <  n)
22                          {
23                              mymatrix[m, i  +   1 =  tmp  +   1   +  m;
24                               if  (m  ==  i)
25                              {
26                                   // 此列最后一个元素,单独处理
27                                  mymatrix[m  +   1 , i  +   1 =  tmp  +   1   +  m  +   1 ;
28                              }
29                          }
30                      }
31                  }
32                   else
33                  {
34                       // 此时行数为偶数
35                       for  ( int  m  =   0 ; m  <=  i; m ++ )
36                      {
37                          mymatrix[i, m]  =  tmp  -  m;
38                           if  (i  +   1   <  n)
39                          {
40                              mymatrix[i  +   1 , m]  =  tmp  +   1   +  m;
41                               if  (m  ==  i)
42                              {
43                                   // 此列最后一个元素,单独处理
44                                  mymatrix[i  +   1 , m  +   1 =  tmp  +   1   +  m  +   1 ;
45                              }
46                          }
47                      }
48                  }
49              }
50               return  mymatrix;
51          }
52           static   void  show( int [,] matrix)
53          {
54               for ( int  i = 0 ;i < matrix.GetLength( 0 );i ++ )
55              {
56                   for  ( int  j  =   0 ; j  <  matrix.GetLength( 1 ); j ++ )
57                  {
58                      Console.Write( " {0,3}   " , matrix[i, j]);
59                  }
60                  Console.WriteLine();
61              }
62          }
63           static   void  Main( string [] args)
64          {
65              Console.WriteLine( " 请输入需要输出的变幻螺旋阶数:(为了显示方便,请输入31以下的数字) " );
66               int  i;
67               while  ((i  =   int .Parse(Console.ReadLine()))  >   0 )
68              {
69                   int [,] mymatrix  =  getMatrix(i);
70                  show(mymatrix);
71              }
72          }
73      }
74  }
75 

 

 

转载于:https://www.cnblogs.com/hanyulcf/archive/2010/09/16/mymatrix.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值