Инициализируйте двумерный массив значениями, указанными в таблице ниже

Инициализируйте двумерный массив значениями, указанными в таблице ниже.

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()

Похоже, вам может понадобиться использовать оператор модуля (%), чтобы получить интервалы...

mykaf 05.04.2024 19:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать логику по модулю, чтобы определить, какие диагонали получают ненулевые значения. Обратите внимание, что расстояние между двумя диагоналями не 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);

Большое спасибо, это решает проблему. Я не знаю, почему я никогда не думал об использовании модульного подхода.

Dennis-The14th-Web 05.04.2024 19:28

Вот решение, которое не использует модуль. Это происходит следующим образом.

  1. Создайте массив n x narr, все элементы которого будут равны нулю.
  2. Уменьшите диагональ, увеличив индекс i от 0 до n-1.
  3. Установите diag = (i+1)**2 и arr[i][i] = diag
  4. Набор j = i+4
  5. Пока j < n, установите arr[i][j] и arr[j][i] на diag, затем j = j+4
  6. Если i = n-1 мы закончили постройку arr; иначе установите i = i+1 и повторите с шага 3.

На шаге 5 при установке arr[i][j] = diagi можно рассматривать как индекс строки, а 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

Другие вопросы по теме