打印回形数组排序
按照如下要求打印
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
思路 :
观察3*3,4*4 ,5*5矩阵可以得到公式:矩阵圈数为 (n+1)/2 (n表示边长),依照顺时针方向填充,每次填充 n-1个元素
以长度 n = 4为例,一共会循环俩圈,第一圈填充过程
1 2 3 0
0 0 0 0
0 0 0 0
0 0 0 0
1 2 3 4
0 0 0 5
0 0 0 6
0 0 0 0
1 2 3 4
0 0 0 5
0 0 0 6
0 9 8 7
1 2 3 4
12 0 0 5
11 0 0 6
10 9 8 7
代码
--填充回形数组
function CircleArr(num)
print("start print circle arr")
local tab = CreateArr(num)--创建多维数组
local row = 1--行索引
local col = 1--列索引
local cur = 0--当前填充数
local circleNum =(num+1)/2--循环圈数
for i = 1,circleNum do
row,col = i,i--重置初始位置
--上面
while col <= num - i do
cur = cur + 1
tab[row][col] = cur
col = col + 1
end
--右边
while row <= num - i do
cur = cur + 1
tab[row][col] = cur
row = row + 1
end
--下面
while col > i do
cur = cur + 1
tab[row][col] = cur
col = col - 1
end
--左边
while row > i do
cur = cur + 1
tab[row][col] = cur
row = row - 1
end
end
--中心 单独处理
if(num%2 == 1)then
local center = num//2 +1--取整
tab[center][center] = cur + 1
end
return tab
end
--获取数组长度
function GetLength(tab)
local len = 0;
for k, v in pairs(tab) do
len = len + 1
end
return len
end
--打印多维数组
function PrintArr(tab)
local str = ""
for i = 1, GetLength(tab) do
for j = 1, GetLength(tab) do
str = str.. tab[i][j] .."\t"
end
str = str.."\n"
end
print(str)
end
--创建多维数组
function CreateArr(num)
local tab = {}
for i = 1, num do
tab[i] = {}
for j = 1, num do
tab[i][j] = 0
end
end
return tab
end
PrintArr(CircleArr(5))
结果

版权声明:本文为qq_40985921原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。