本文目录
算法描述
这是一道简单的算法题:指定一个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
考察知识点
- 流控制中的条件判断与循环
- 很容易越界或出现死循环
算法分析
- 首先声明一个N*N的整形对称矩阵,所有元素默认值为0
- 对矩阵中的元素赋值,赋值总次数count={1,N*N}
- 依次从上往下,从左往右,从下往上,从右往左四轮循环赋值,每一轮遇到当前数组越界或者已赋值(数组元素大于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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
