由于并没有找到一个每个坐标都通用的规律,写了一个较为复杂的逻辑
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(' '))
})
}
})();