算法:PowerShell打印旋转矩阵


算法描述

这是一道简单的算法题:指定一个N*N的二位矩阵,以此从下->右->上->左赋值,比如:
当N=1时:

1

当N=2时:

1	4	
2	3

当N=3时:

1	8	7	
2	9	6	
3	4	5

当N=4时:

1	12	11	10	
2	13	16	9	
3	14	15	8	
4	5	6	7

考察知识点

  • 流控制中的条件判断与循环
  • 很容易越界或出现死循环

算法分析

  1. 首先声明一个N*N的整形对称矩阵,所有元素默认值为0
  2. 对矩阵中的元素赋值,赋值总次数count={1,N*N}
  3. 依次从上往下,从左往右,从下往上,从右往左四轮循环赋值,每一轮遇到当前数组越界或者已赋值(数组元素大于0),表示本轮结束。

算法实现

powershell知识点

  • 对称二维数组的声明方式
  • 转义字符的表示
  • Write-Host命令的NoNewLine参数

源脚本

function Print-RotateMatrix([int]$N)
{
 if($N -lt 1) {
  return
 }

 #数组初始化
 $array=new-object 'int[,]' $N,$N
 #矩阵的元素个数
 $maxNumbers=[math]::Pow($N,2)

 # 矩阵赋值
 $count=1
 $i=0
 $j=0 
 while($count -le $maxNumbers)
 {
  #往下赋值
  while( ($j -lt $N) -and ($array[$i,$j] -eq 0))
  {
   $array[$i,$j]=$count
   $count++
   $j++
  }
  $j--
  $i++
  
  #往右赋值
  while( ($i -lt $N) -and ($array[$i,$j] -eq 0))
  {
   $array[$i,$j]=$count
   $count++
   $i++
  }
  $j--
  $i--

  #往上赋值
  while( ($j -ge 0) -and ($array[$i,$j] -eq 0))
  {
   $array[$i,$j]=$count
   $count++
   $j--
  }
  $j++
  $i--
  #往左赋值
  while( ($i -ge 0) -and ($array[$i,$j] -eq 0))
  {
   $array[$i,$j]=$count
   $count++
   $i--
  }
  $i++
  $j++
 }

 # 打印矩阵
 for($i=0;$i -lt $N;$i++){
  for($j=0;$j -lt $N;$j++){
  Write-Host $array[$j,$i] -NoNewline
  Write-Host "`t" -NoNewline
  }
  Write-Host "`n" -NoNewline
 }
}

测试调用

Print-RotateMatrix -N 0
Print-RotateMatrix -N 1
Print-RotateMatrix -N 3
Print-RotateMatrix -N 4

 

本文链接: https://www.pstips.net/print-rotatematrix.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注