Lua 打印回型矩阵

打印回形数组排序

按照如下要求打印

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版权协议,转载请附上原文出处链接和本声明。