惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
博客园_首页
博客园 - 【当耐特】
V
Visual Studio Blog
博客园 - 叶小钗
月光博客
月光博客
美团技术团队
J
Java Code Geeks
小众软件
小众软件
Y
Y Combinator Blog
博客园 - Franky
Martin Fowler
Martin Fowler
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG

博客园 - Macou

[转]软件标准项目文档 INTEL 汇编指令集 周未钓鱼钓到一只花罗汉,价值大概3000RMB 个人整理的Linux Shell语法速查表(用C语言语法来作对比) [转]MONO之Red Hat5.5企业版 Linux系统ASP.NET环境配置 [转]在Eclipse3.3中安装VE插件 png 文件分析 PNG (Portable Network Graphics) Specification C语言 BMP图片处理 [转]UML中数据流图,用例图,类图,对象图,角色图,活动图,序列图详细讲述保存供参考 中断向量表 [转]程序人生--我已经努力了七年 [转]成功人士的20个优良习惯 [转]ViewState机制由浅入深3 [转]ViewState机制由浅入深2 [转]ViewState机制由浅入深1 [转].NET开源地理信息系统(GIS) [转]60多个精品源码站 [转]与动态执行的C# 代码进行通讯
[原创]一个数组整数环绕算法
Macou · 2010-11-12 · via 博客园 - Macou

  今天看到一位网友碰到的一道面试题目,觉得挺有意思的,就写了一下算法:

  题目:打印下面这个矩阵

  1  2  3  4  5  6

  20  21  22  23  24  7

  19  32  33  34  25  8

  18  31  36  35  26  9

  17  30  29  28  27  10

  16  15  14  13  12  11

代码如下:class program
 {
    static void Main(string[] args)
    {
       new program().Run();
    }

 //各方向环绕的次数

  int right = 1;
  int down = 0;
  int left = 0;
  int up = 0;


  int n = 6; //矩阵 N*N

 //矩阵行与列  

  int row = 0;
  int col = 0;


  Direction direction = Direction.Right;
  int[,] a = new int[6, 6];

  enum Direction
  {
     Right = 0,
     Down = 1,
     Left = 2,
     Up = 3
  }

  void Run()
  {
     for (int i = 1; i <= n * n; i++)
     {
        a[row, col] = i;
        Fang();
     }

     for (int i = 0; i < 6; i++)
     {
        for (int j = 0; j < 6; j++)
        {
           Console.Write(" {0} ", a[i, j]);
        }

        Console.Write("\n");
     }

     Console.Read();
  }

  void Fang()
  {
     switch (direction)
     {
        case Direction.Right:
           if (col < n - down - 1)
           {
              col++;
           }
           else
           {
              direction = Direction.Down;
              row++;
              down++;
           }
           break;
          case Direction.Down:
           if (row < n - left - 1)
           {
              row++;
           }
           else
           {
              direction = Direction.Left;
              col--;
              left++;
           }
           break;
          case Direction.Left:
             if (col > up)
             {
                col--;
             }
             else
             {
                direction = Direction.Up;
                up++;
                row--;
             }
             break;
          case Direction.Up:
             if (row > right)
             {
                row--;
             }
             else
             {
                direction = Direction.Right;
                right++;
                col++;
             }
             break;
         }
    }
 }