Инициализируйте двумерный массив значениями, указанными в таблице ниже.
1 0 0 0 1 0 0 0 1 0
0 4 0 0 0 4 0 0 0 4
0 0 9 0 0 0 9 0 0 0
0 0 0 16 0 0 0 16 0 0
1 0 0 0 25 0 0 0 25 0
0 4 0 0 0 36 0 0 0 36
0 0 9 0 0 0 49 0 0 0
0 0 0 16 0 0 0 64 0 0
1 0 0 0 25 0 0 0 81 0
0 4 0 0 0 36 0 0 0 100
Я пытался сделать диагональный узор, но, похоже, не смог выполнить этот узор. Это мой диагональный код.
На приведенной выше диаграмме диагональный узор, кажется, начинается после замены каждых трех интервалов нулями.
function matrixPattern() {
let arr = [];
let len = 10;
for (let i = 0; i < len; i++) {
arr[i] = [];
for (let j = 0; j < len; j++) {
arr[i][j] = i !== j ? 0 : (i + 1) * (j + 1)
}
}
for (let i in arr) {
let line = '';
for (let j in arr[i]) {
line += arr[i][j] + '\t';
}
console.info(line);
}
}
matrixPattern()
Вы можете использовать логику по модулю, чтобы определить, какие диагонали получают ненулевые значения. Обратите внимание, что расстояние между двумя диагоналями не 3, а 4: первая диагональ начинается в (0, 0), а правая от нее — в (4, 0)!
Ненулевые значения представляют собой квадраты минимального расстояния слева или сверху. Таким образом, это не произведение двух разных значений, а два одинаковых значения. Внутреннее задание может быть:
arr[i][j] = (i - j) % 4 ? 0 : (Math.min(i, j) + 1) ** 2
Так:
function matrixPattern() {
let arr = [];
let len = 10;
for (let i = 0; i < len; i++) {
arr[i] = [];
for (let j = 0; j < len; j++) {
arr[i][j] = (i - j) % 4 ? 0 : (Math.min(i, j) + 1) ** 2;
}
}
return arr;
}
const mat = matrixPattern();
for (const row of mat) console.info(...row);
Большое спасибо, это решает проблему. Я не знаю, почему я никогда не думал об использовании модульного подхода.
Вот решение, которое не использует модуль. Это происходит следующим образом.
n
x n
arr
, все элементы которого будут равны нулю.i
от 0
до n-1
.diag = (i+1)**2
и arr[i][i] = diag
j = i+4
j < n
, установите arr[i][j]
и arr[j][i]
на diag
, затем j = j+4
i = n-1
мы закончили постройку arr
; иначе установите i = i+1
и повторите с шага 3.На шаге 5 при установке arr[i][j] = diag
i
можно рассматривать как индекс строки, а j
как индекс столбца. При установке arr[j][i] = diag
, j
можно рассматривать как индекс строки, а i
как индекс столбца.
Вот код Ruby для создания массива arr
.
n = 10
# create an nxn array with all elements set to zero
arr = Array.new(n) { Array.new(n,0) }
# loop over i = 0 to n-1
n.times do |i|
diag = (i+1)**2
arr[i][i] = diag
# starting with j = i + 4, increment j by 4 while j < n
j = i + 4
while j < n
arr[i][j] = diag
arr[j][i] = diag
j = j + 4
end
end
arr
можно отобразить следующим образом, подтвердив, что это желаемый массив.
1 0 0 0 1 0 0 0 1 0
0 4 0 0 0 4 0 0 0 4
0 0 9 0 0 0 9 0 0 0
0 0 0 16 0 0 0 16 0 0
1 0 0 0 25 0 0 0 25 0
0 4 0 0 0 36 0 0 0 36
0 0 9 0 0 0 49 0 0 0
0 0 0 16 0 0 0 64 0 0
1 0 0 0 25 0 0 0 81 0
0 4 0 0 0 36 0 0 0 100
Похоже, вам может понадобиться использовать оператор модуля (%), чтобы получить интервалы...