资讯专栏INFORMATION COLUMN

用javascript生成回型矩阵/蛇形矩阵

n7then / 3156人阅读

摘要:回型蛇形矩阵形式上述这种形式即为蛇形矩阵。例如的中间公约数为,所以为三行三列。若为则中间公约数分别是,所以为四行五列。之后在根据行列中比较小的那个来判断有几层回字型。源码在浏览器控制台即可调用函数。

回型/蛇形矩阵形式
1  2  3
8  9  4
7  6  5

上述这种形式即为蛇形矩阵。

原文首先发布于 TinyTin的自留地

解决思路

给定一个数字 n(为最终值例如上述中 9
首先先判断有几行几列,这里只要求出n 的中间公约数。例如 9 的中间公约数为 3 ,所以为三行三列。若 n 为 20 则中间公约数分别是4,5.所以为四行五列。

之后在根据行列中比较小的那个来判断有几层“回字型”。例如n=9 时候有三层,n=20 时候也是三层。然后就可以写个递归来把这些数字放进一个二维数组中的合适位置上。

javascript源码

在浏览器控制台即可调用 Annular 函数。

function Annular(n) {
    n = parseInt(n);
    var divisor = [];
    for (var i = 1; i <= n; i++) {
        if (n % i == 0) {
            divisor.push(i);
        }
    }
    var len = divisor.length;
    if (len % 2 == 0) {
        var mid = len / 2;
        var row = divisor[mid - 1];
        var col = divisor[mid];
    } else {
        var row = divisor[Math.floor(len / 2)];
        var col = row;
    }
    //console.log("行:" + row + "  列:" + col);
    var arr = new Array(row)
    for (var j = 0; j < arr.length; j++) {
        arr[j] = new Array(col)
    }
    var quan = Math.ceil(row / 2);
    var begin = 1;
    var q = 0;
    while (q < quan) {
        var top = col - q * 2;
        for (var i = 0; i < top; i++) {
            arr[q][i + q] = begin + i;
        }
        var right = row - q * 2;
        for (var i = 0; i < right; i++) {
            arr[i + q][col - 1 - q] = begin + top - 1 + i;
        }
        var bottom = col - q * 2;
        for (var i = 0; i < bottom; i++) {
            arr[row - 1 - q][bottom - i - 1 + q] = begin + top - 1 + right - 1 + i;
        }
        var left = row - q * 2 - 1;
        for (var i = 0; i < left; i++) {
            arr[row - 1 - q - i][q] = begin + top - 1 + right - 1 + bottom - 1 + i;
        }
        var stop = begin + top + right + bottom + left - 4;
        begin = stop + 1;
        q++;
    }
    console.log(arr);
}

例子
Annular(25);

//输出

[ [ 1, 2, 3, 4, 5 ],
  [ 16, 17, 18, 19, 6 ],
  [ 15, 24, 25, 20, 7 ],
  [ 14, 23, 22, 21, 8 ],
  [ 13, 12, 11, 10, 9 ] ]

Annular(25);

//输出

[ [ 1, 2, 3, 4, 5 ],
  [ 14, 15, 16, 17, 6 ],
  [ 13, 20, 19, 18, 7 ],
  [ 12, 11, 10, 9, 8 ] ]  

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80300.html

相关文章

  • 赛码模拟题:蛇形填数 SnakeSquare (Java 8)

    摘要:题目在方阵里填入要求填成蛇形。填数的循环按照走。重点是控制蛇的方向和移动范围。假设表示行数,表示列数垂直向下,递增,不变,到达最下方变水平,递增变为递减。还有要注意矩阵下标和坐标的区别,原点位置不同,不建议用作为变量名,易混淆。 题目:在nn方阵里填入1,2,...,nn,要求填成蛇形。例如n=4时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 ...

    lk20150415 评论0 收藏0
  • WebVR开发教程——深度剖析

    摘要:片元着色器主要处理片元颜色,在这里只是将纹理坐标和纹理对象传给片元着色器。根据公式分别计算出左右视口的模型视图投影矩阵,传给顶点着色器程序,与顶点缓冲区的顶点坐标相乘绘制出最终顶点。 最近WebVR API 1.1已经发布,2.0草案也在拟定中,在我看来,WebVR走向大众浏览器是早晚的事情了,今天本人将对WebVR开发环境和开发流程进行深入介绍。 WebVR与WebVR API 首先...

    Cciradih 评论0 收藏0
  • Tensorflow快餐教程(4) - 矩阵

    摘要:最常用的就是对角阵,只有一条对角线上有值。可以通过函数来获得逆矩阵,例我们来验算一下与相乘是不是单位矩阵果然是。对角阵比较特殊,还满足交换律求行列式的值以判断是否有逆矩阵我们学习线性代数知道,如果一个矩阵要想有逆矩阵,它的行列式一定不能为。 矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性生成函数已经不够用了。 可以通过...

    ad6623 评论0 收藏0
  • Tensorflow快餐教程(4) - 矩阵

    摘要:最常用的就是对角阵,只有一条对角线上有值。可以通过函数来获得逆矩阵,例我们来验算一下与相乘是不是单位矩阵果然是。对角阵比较特殊,还满足交换律求行列式的值以判断是否有逆矩阵我们学习线性代数知道,如果一个矩阵要想有逆矩阵,它的行列式一定不能为。 矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性生成函数已经不够用了。 可以通过...

    h9911 评论0 收藏0
  • Tensorflow快餐教程(4) - 矩阵

    摘要:最常用的就是对角阵,只有一条对角线上有值。可以通过函数来获得逆矩阵,例我们来验算一下与相乘是不是单位矩阵果然是。对角阵比较特殊,还满足交换律求行列式的值以判断是否有逆矩阵我们学习线性代数知道,如果一个矩阵要想有逆矩阵,它的行列式一定不能为。 矩阵 矩阵的初始化 矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性生成函数已经不够用了。 可以通过...

    isLishude 评论0 收藏0

发表评论

0条评论

n7then

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<