zoukankan      html  css  js  c++  java
  • 生成变换方向矩阵

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

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

    算法思路:

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

     程序输出:

     

    C#代码如下: 

    代码
     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 
  • 相关阅读:
    HYSBZ 1500 [NOI2005]维修数列 splay
    The 15th Zhejiang University Programming Contest
    工作小助手-v1.0正式上线,欢迎体验!!!
    登录窗体登录失败但是MainForm依然弹出无法结束的解决方法
    报错'cannot change visible in onshow or onhide'
    release模式发布软件的方法
    发布软件时因为窗体自动加载次序不对导致报错00000000
    修改类别 (类实现)两种方法
    从记事本导入记录
    快速粘贴
  • 原文地址:https://www.cnblogs.com/hanyulcf/p/mymatrix.html
Copyright © 2011-2022 走看看