Двумерный массив

338
28 сентября 2017, 16:22

Как в двумерный массив вставить числа по возрастанию в стоблце? То есть

0  4  8
1  5  9
2  6 10
3  7

function ll(num, col) { 
  var n = Math.ceil(num / col); 
 
  var mas = []; 
 
  for (var i = 0; i < n; i++) { 
    mas[i] = []; 
    for (var j = 0; j < col; j++) { 
      mas[i][j] = num; 
    } 
  } 
  return mas; 
} 
console.log(ll(10, 3));

Answer 1

mas[i][j] = num;

Вот тут нужно заменить num на то, что вам нужно

  • i*(n-1)+j - по строкам
  • j*n+i - по столбцам

function ll (num, cols){ 
        var rows = Math.ceil((num+1)/cols); 
 
        var mas = []; 
 
        for (var i = 0; i < rows; i++){ 
            mas[i] = []; 
            for (var j = 0; j < cols; j++){ 
              mas[i][j] = j*rows+i; 
        }} 
        return mas; 
      } 
      console.log(ll(10,3));

Если же нужно выводить не прямоугольную матрицу (без 11) - можно попросту прерывать цикл по условию ">10"

function ll (num, cols){ 
        var rows = Math.ceil((num+1)/cols); 
 
        var mas = []; 
 
        for (var i = 0; i < rows; i++){ 
            mas[i] = []; 
            for (var j = 0; j < cols; j++){ 
              let number = j*rows+i; 
              if (number > num) break;  
              mas[i][j] = number; 
        }} 
        return mas; 
      } 
      console.log(ll(10,3));

В последнем массиве видим искомые [3, 7]

Answer 2

function ll(num, cols) { 
  var n = Math.ceil((num + 1) / cols); 
 
  var res = []; 
 
  for (var q=0; q<n; ++q) { 
    res.push([]); 
  } 
   
  for (var q=0; q<=num; ++q) { 
    res[q%res.length].push(q); 
  } 
 
  return res; 
} 
 
console.log(JSON.stringify(ll(10, 3))); 
console.log(JSON.stringify(ll(11, 3))); 
console.log(JSON.stringify(ll(12, 3)));

Answer 3

вы постоянно присваиваете всем элементам массива одно и тоже значение num: mas[i][j] = num; эту строчку следует изменить на mas[i][j] = i*n+j и если я правильно понял задачу, то еще и изменить граничные условия цикла. При этом на выходе в mas будут лежать столбцы в виде массивов.

 function ll (num, col){ 
            var n = Math.ceil(num/col); 
 
            var mas = []; 
 
            for (var i = 0; i < col; i++){ 
                mas[i] = []; 
                for (var j = 0; j < n; j++){ 
                  mas[i][j] = i*n+j; 
            }} 
            return mas; 
          } 
          console.log(ll(10,3));

READ ALSO
input + knockout не ставит пробелы

input + knockout не ставит пробелы

Возникла проблема, делаю сайт с магазинами, есть функция добавления магазина в ней появляется много инпутов такого плана и с ними все в порядке...

242
Как не открывать всплывающее окно при условии, что

Как не открывать всплывающее окно при условии, что

Как не открывать всплывающее окно при условии, что файл в поле input type="file" не прикреплен?

214
Ожидание загрузки множества json&#39;ов

Ожидание загрузки множества json'ов

ПриветствуюВ проекте используется несколько json файлов с данными, и мне необходима загрузка всех файлов

284