• 生成变换方向矩阵


    如上图所示,本文的主要目的是生成一个这样按红线顺序从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 
  • 相关阅读:
    Azure产品目录
    AWS产品目录
    BD
    Cloud Resource
    do-release-upgrade升级笔记
    Gluster vs Ceph:开源存储领域的正面较量
    OpenStack大规模部署详解
    SECURITY ONION:防御领域的kali
    vue非父子组件间传参问题
    vue源码之响应式数据
  • 原文地址:https://www.cnblogs.com/hanyulcf/p/mymatrix.html
Copyright © 2020-2023  润新知