如何创建矩阵,输出必须类似于:
1,3,5,7,9
2、4、6、8、10
11,13,15,17,19
20、22、24、26、28
期待对JS的回答,但这不是重点,因为我正在寻找一种算法。
谢谢
我已经尝试过这样的事情:
let arr = [];
for(let i = 0; i < 2; i++){
arr[i] = []
for(let j = 0; j < 5; j++){
if(j % 2 ==0){
arr[j] = i
}
}
}
console.log(arr)
答案 0 :(得分:2)
如您所见,每次您固定起点后,都会添加一个公共数字2。所以在这里我固定了两个起点,一个是even at 2
,另一个是odd at 1
。现在,在每次迭代中,将两个值都增加2,并将evenArray
和oddArray
都添加到最终输出中。
每次内部for循环迭代后,不要忘记reset
evenArray
和oddArray
。
let even = 2;
let odd = 1;
let arr = [];
for(let i = 0; i < 2; i++){
let evenArr = []
let oddArr = []
for(let j = 0; j < 5; j++){
evenArr[j] = even;
oddArr[j] = odd;
even +=2;
odd +=2;
}
even = (even-2) * 2; // to take care of point where even starts with double of last inserted value.
arr.push(oddArr.join(' '),evenArr.join(' '))
}
console.log(arr)
答案 1 :(得分:2)
首先,尝试获取构建规则
row start comment
---- ---- ---- ---- ---- ------ ------ -------------------
1 3 5 7 9 odd 1
2 4 6 8 10 even 2
11 13 15 17 19 odd 10 needs an adjustment
20 22 24 26 28 even 20
然后用所需的行创建一个数组,并用值填充它。根据行的索引,用2
或5
夹住每行的起始值。
在每一行的内部取一个起始值,对非偶数或奇数进行调整,然后加上内部索引的两倍。
var array = Array.from(
{ length: 4 },
(start => (_, i) => Array.from(
{ length: 5 },
(v => (_, j) => v + (v % 2 === i % 2) + j * 2)
(start *= (i % 2 ? 2 : 5))
))
(0.2)
);
console.log(array.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }