注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C#蛇形矩阵  

2013-07-05 09:23:05|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

写程序构造一个提供大小的方阵,该方阵构成一个蛇形矩阵,矩阵从左上角开始以三角形的方式开始填充,例如n=4的时候矩阵如下:

C蛇形矩阵 - Lemniscate - 信息,灵感,创新

 这个程序的关键是要要根据当前的走向确定下一个数的位置,因此构造一个方向枚举,代码如下:

using System;
namespace Lemniscate
{
   class Program
   {
       static void Main(string[] args)
       {
           Print(SnakeMatrix(12));
           Console.Read();
       }

       private static int[][] SnakeMatrix(int n)
       {
           int[][] ret = new int[n][];              
           for (int i = 0; i < n; i++)
               ret[i] = new int[n];
           int t = 1;
           Direction d=Direction.Right;
           int row=0,col=0;
           ret[row][col] = t;
           t++;
           while (t <= n * n)
           {
               switch (d)
               {
                   case Direction.UpRight:
                       {
                           if (col==n-1)
                               d = Direction.Down;
                           else if (row == 0)
                               d = Direction.Right;
                           else
                           {
                               row--;
                               col++;
                               ret[row][col] = t;
                               t++;
                           }
                           break;
                       }

                   case Direction.DownLeft:
                       {
                           if (row == n - 1)
                               d = Direction.Right;
                           else if (col == 0)
                               d = Direction.Down;
                           else
                           {
                               row++;
                               col--;
                               ret[row][col] = t;
                               t++;
                           }
                           break;
                       }

                   case Direction.Right:
                       {
                           col++;
                           ret[row][col] = t;
                           if (row == 0)
                               d = Direction.DownLeft;
                           if (row == n - 1)
                               d = Direction.UpRight;
                           t++;
                           break;
                       }

                   case Direction.Down:
                           {
                               row++;
                               ret[row][col] = t;
                               if (col == 0)
                                   d = Direction.UpRight;
                               if (col == n - 1)
                                   d = Direction.DownLeft;
                               t++;
                               break;                                
                           }
               }//switch
           }//while
           return ret;
       }

       private enum Direction
       {
           Right=1,
           Down=2,
           UpRight=3,
           DownLeft=4
       }

       private static void Print(int[][] a)
       {
           int row = a.Length;
           int col = a[0].Length;
           for (int i = 0; i < row; i++)
           {
               for (int j = 0; j < col; j++)
               {
                   Console.Write(a[i][j].ToString().PadLeft(4,' '));
               }
               Console.WriteLine();
           }
       }
   }
}
程序在n=12的时候输出如下,有图有真相:

C蛇形矩阵 - Lemniscate - 信息,灵感,创新

 
  评论这张
 
阅读(683)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016