【简单】算法nodeJs:蛇形矩阵

55 阅读1分钟

image.png

由于并没有找到一个每个坐标都通用的规律,写了一个较为复杂的逻辑

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    const rowNO1 = (row) => {
        if (row == 0) return 1;
        else {
            let n = 1;
            for (let i = 1; i <= row; i++) {
                n += i;
            }
            return n;
        }
    };
    const fn = (n) => {
        const arr = [];
        for (let i = 0; i < n; i++) {
            let firstNum = rowNO1(i);
            let rowArr = [firstNum];
            for (let j = 1; j < n - i; j++) {
                rowArr.push(rowArr[j - 1] + i + 1 + j);
            }
            arr.push(rowArr);
        }
        return arr;
    };

    while ((line = await readline())) {
        line = parseInt(line);
        const arr = fn(line);
        for (let i = 0; i < arr.length; i++) {
            console.log(arr[i].join(" "));
        }
    }
})();

在评论区找到一个发现规律的答案

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    while ((line = await readline())) {
      let n = Number(line)
      let arr = []
      for(let i = 0; i < n; i++){
        let subArr = []
        for(let j = 0; j< n ; j++){
          subArr[j] = (j+1)*(j+2)/2 - i
        }
        arr.push(subArr.slice(i))
      }
    //  控制格式输出
       arr.forEach(item => {
        console.log(item.join(' '))
       })
    }
})();