Created
July 11, 2025 08:38
-
-
Save ofcRS/47d2f3748cf461479e72fdc17097d90d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * Утилитарная функция для генерации случайного целого числа в заданном диапазоне. | |
| * @param {number} min - Минимальное возможное значение (включительно). | |
| * @param {number} max - Максимальное возможное значение (включительно). | |
| * @returns {number} Случайное целое число. | |
| */ | |
| function getRandomInt(min, max) { | |
| min = Math.ceil(min); | |
| max = Math.floor(max); | |
| return Math.floor(Math.random() * (max - min + 1)) + min; | |
| } | |
| /** | |
| * Создает и заполняет двумерный массив (матрицу) случайными числами. | |
| * @param {number} rows - Количество строк в матрице. | |
| * @param {number} cols - Количество столбцов в матрице. | |
| * @param {number} minVal - Минимальное значение для случайных чисел. | |
| * @param {number} maxVal - Максимальное значение для случайных чисел. | |
| * @returns {number[][]} Сгенерированный двумерный массив. | |
| */ | |
| function createMatrix(rows, cols, minVal, maxVal) { | |
| const matrix = []; | |
| for (let i = 0; i < rows; i++) { | |
| const row = []; | |
| for (let j = 0; j < cols; j++) { | |
| row.push(getRandomInt(minVal, maxVal)); | |
| } | |
| matrix.push(row); | |
| } | |
| return matrix; | |
| } | |
| /** | |
| * Находит наименьшее положительное число в строке. | |
| * @param {number[]} row - Массив чисел (строка матрицы). | |
| * @returns {number | string} Наименьшее положительное число или строка "нет", если таких чисел нет. | |
| */ | |
| function findMinPositive(row) { | |
| const positives = row.filter(num => num > 0); | |
| if (positives.length === 0) { | |
| return "нет"; // Обработка пограничного случая, когда в строке нет положительных чисел. | |
| } | |
| return Math.min(...positives); | |
| } | |
| /** | |
| * Рассчитывает минимальное количество замен, необходимых для того, | |
| * чтобы в строке не было трех последовательных положительных или отрицательных чисел. | |
| * Ноль не считается ни положительным, ни отрицательным. | |
| * @param {number[]} row - Массив чисел (строка матрицы). | |
| * @returns {number} Минимальное количество замен. | |
| */ | |
| function countReplacements(row) { | |
| if (row.length < 3) { | |
| return 0; // Замены не требуются, если в строке меньше 3 элементов. | |
| } | |
| let replacements = 0; | |
| // Создаем массив знаков для удобства. 1 для >0, -1 для <0, 0 для 0. | |
| const signs = row.map(num => Math.sign(num)); | |
| for (let i = 0; i <= signs.length - 3; i++) { | |
| const sign1 = signs[i]; | |
| const sign2 = signs[i + 1]; | |
| const sign3 = signs[i + 2]; | |
| // Проверяем, что все три знака одинаковы и не равны нулю. | |
| if (sign1 !== 0 && sign1 === sign2 && sign2 === sign3) { | |
| replacements++; | |
| // Чтобы избежать повторного подсчета той же последовательности, | |
| // мы "пропускаем" следующие два элемента, так как одна замена | |
| // (например, среднего элемента) уже решает проблему для этой тройки. | |
| i += 2; | |
| } | |
| } | |
| return replacements; | |
| } | |
| /** | |
| * Основная функция для выполнения скрипта. | |
| */ | |
| function main() { | |
| // --- 1. Инициализация --- | |
| const ROWS = 10; | |
| const COLS = 10; | |
| const MIN_RANDOM_VAL = -100; | |
| const MAX_RANDOM_VAL = 100; | |
| // --- 2. Создание массива --- | |
| const matrix = createMatrix(ROWS, COLS, MIN_RANDOM_VAL, MAX_RANDOM_VAL); | |
| // --- 3. Поиск глобального минимума и его строки --- | |
| let globalMin = Infinity; | |
| let minRowIndex = -1; | |
| matrix.forEach((row, index) => { | |
| const rowMin = Math.min(...row); | |
| if (rowMin < globalMin) { | |
| globalMin = rowMin; | |
| minRowIndex = index; | |
| } | |
| }); | |
| // --- 4. Вывод результатов в консоль --- | |
| console.log("Сгенерированный массив и анализ строк:"); | |
| console.log("=".repeat(120)); | |
| matrix.forEach((row, index) => { | |
| // Выполняем вычисления для текущей строки | |
| const minPositive = findMinPositive(row); | |
| const replacements = countReplacements(row); | |
| // Форматируем вывод для читаемости | |
| const marker = (index === minRowIndex) ? '*' : ' '; // Метка для строки с минимальным элементом | |
| const formattedRow = row.map(num => String(num).padStart(5, ' ')).join(''); | |
| const minPositiveStr = `Наим. полож.: ${String(minPositive).padEnd(4, ' ')}`; | |
| const replacementsStr = `Замен: ${replacements}`; | |
| // Выводим отформатированную строку | |
| console.log(`${marker} [${formattedRow} ] | ${minPositiveStr} | ${replacementsStr}`); | |
| }); | |
| console.log("=".repeat(120)); | |
| console.log(`* - отмечена строка, содержащая минимальное число во всем массиве (${globalMin}).`); | |
| } | |
| // Запуск скрипта | |
| main(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment