@gitQuark

Как найти минимальное значение в строках матрицы?

Дали задание: Дана матрица размером A x B. Найти минимальное значение в каждой строке.

Написал таким образом:

<script>   

        document.write("4. ")
        let mass = [
            [11, 2, 36],
            [4, 5, 63],
            [7, 84, 9]
        ]
            
        for (let i = 0; i < mass.length; i++) {
            s = 0
            for (let j = 0; j < mass.length; j++) {
                s = mass[i][j]
            }
            document.write(Math.min(s))
        }

    </script>


Но, в итоге выдает "4. 36639".
4 - это номер задания.

Подскажите, в чем может быть проблема, пожалуйста?
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
@StiflerProger
Решение писать не буду, но направлю твоё мышление, потому-что у тебя сейчас код написан просто "от балды", и не делает вообще ничего

Первым дело ты определил что размер матрицы (i x j), где i - высота матрицы (строки), j - ширина (столбцы)
По заданию, нужно найти минимальное значение в каждой строке матрицы, соответственно перебираем строки
for (let i = 0, i < mass.length, i++) {
  // mass[i] это строка массива в каждой итерации цикла
}

до этого момента у тебя всё правильно, а теперь начинаются ошибки. По логике, чтобы найти минимальное значение в строке, нужно пройтись по каждому элементу в текущей строке mass[i], соответственно количество итераций, во втором цикле, должно быть равно mass[i].length, а не mass.length, как у тебя сейчас
for (let j = 0, j < mass[i].length, j++) {
  // mass[i][j] это каждый столбец в строке 
}

теперь, остаётся только сравнивать каждый элемент mass[i][j], и найти минимальный, для этого перед началом цикла, тебе нужно создать переменную, в которую ты запоминаешь минимальное значение. Ты пытался это сделать, но присваиваешь s = 0, хотя лучше занести сюда первое значение в массиве let min = mass[i][0] (задаю название переменной так, чтобы было понятно что она означает)
И перебирая элементы в цикле, ты должен сравнивать значение текущего минимального (min) и значение текущего элемента (mass[i][j]), если элемент текущий получился меньше, то присваиваешь его значение в минимальному
// вариант 1.
if (min > mass[i][j]) min = mass[i][j];

// вариант 2.
min = Math.min(min, mass[i][j]);


по окончанию цикла, у тебя в переменной min, будет минимальное значение в строке матрицы
for (let i = 0, i < mass.length, i++) {
  // mass[i] это строка массива в каждой итерации цикла
  // тут создавай переменную min
  for (let j = 0, j < mass[i].length, j++) {
    // mass[i][j] это каждый столбец в строке 
    
    // тут сравнивай текущее значение с минимальным
  }
  // тут у тебя min будет минимальным в строке
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Почти правильно решили.
В коде надо четко понимать, что есть что.

Math.min() возвращает минимальное значение среди переданных ему.
Т.е. надо в скобки Math.min() положить несколько значений, из которых он выберет одно, минимальное.

В задании просят найти минимальное в каждой строке. Значит, в Math.min() надо передать все значения из очередной строки.

Обычно Math.min() принимает варианты через запятую: Math.min(1, 3, 5), но у нас каждая строка это массив вроде [1, 3, 5] Массив удобно «распаковать» с помощью трёх точек ... (так называемый оператор расширения). Есть очередная строка в массиве arr – передать её в Math.min(...arr) – вернёт минимальное значение.

Сейчас внешний цикл for() перебирает у вас как раз строки двумерного массива. То, что надо.
Вложенный цикл уже и не нужен.

P. S. минимальное значение можно искать и перебором, со вторым, вложенным циклом for() как у вас. Это длиннее, но тоже работает, особенно на больших объёмах данных. В таком варианте надо бы убрать Math.min() в конце.

В каждой итерации инициализировать s не в 0, а в константу Number.POSITIVE_INFINITY – больше её точно ничего не будет, все значения окажутся меньше. А дальше сравнивать текущее значение s с очередным числом из строки. И если очередное оказалось меньше — переназначать s это значение, очередной найденный минимум.

spoiler
document.write(
  mass.map(row => Math.min(...row)).join(', ')
); // 2, 4, 7
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы