5. заполнить двумерный массив 7*7 случайными числами от -3 до 5. отсортировать массив по строкам по убыванию суммы модулей элементов в строке

Поляков Евгений Александрович

Учитель информатики высшей категории

Проверено учителем

Для реализации данной задачи на языке Python мы воспользуемся стандартной библиотекой random. Процесс включает генерацию матрицы, расчет критерия сортировки (сумма модулей) и саму перестановку строк. Реализация на языке Python python

importrandom# 1. Инициализация параметровrows = 7cols = 7matrix = [] # 2. Заполнение массива случайными числами от -3 до 5foriin range(rows): row = [random.randint(-3, 5) for_in range(cols)] matrix.append(row) print("Исходный массив:") forrowin matrix: print(row) # 3. Сортировка массива# В качестве ключа (key) используем функцию, вычисляющую сумму модулей элементов строки# reverse=True обеспечивает сортировку по убыванию matrix.sort(key=lambdarow: sum(abs(x) forxin row), reverse=True) print("\nМассив после сортировки (по убыванию суммы модулей строк):") forrowin matrix: # Вычисляем сумму модулей для наглядности выводаcurrent_sum = sum(abs(x) forxin row) print(f"{row} | Сумма модулей: {current_sum}") 
Use code with caution.Разбор алгоритма

  • Генерация данных: Используется генератор списков и функция random.randint(-3, 5). Границы включительны, поэтому числа -3 и 5 могут появиться в массиве.
  • Критерий сортировки:
    • Для каждой строки вычисляется значение j=1n|ai,j|sum from j equals 1 to n of the absolute value of a sub i comma j end-sub end-absolute-value. В Python это эффективно реализуется через sum(abs(x) for x in row).
  • Метод сортировки: Используется встроенный метод .sort(), который работает на алгоритме Timsort. Это стабильная сортировка, что полезно, если у двух строк окажется одинаковая сумма модулей.
  • Направление: Параметр reverse=True перемещает строки с наибольшей суммой в начало списка.

Пример логики вычислений Если первая строка [-3, 0, 1, 5, -2, 4, 1], то сумма её модулей составит: |3|+|0|+|1|+|5|+|2|+|4|+|1|=3+0+1+5+2+4+1=16the absolute value of minus 3 end-absolute-value plus the absolute value of 0 end-absolute-value plus the absolute value of 1 end-absolute-value plus the absolute value of 5 end-absolute-value plus the absolute value of minus 2 end-absolute-value plus the absolute value of 4 end-absolute-value plus the absolute value of 1 end-absolute-value equals 3 plus 0 plus 1 plus 5 plus 2 plus 4 plus 1 equals 16Строка с результатом 16 будет стоять выше строки с результатом 10. Я могу переписать этот код с использованием библиотеки NumPy, если вам требуется более высокая производительность для работы с матрицами большого размера. Хотите посмотреть такой вариант?

Форма ответа

Ваш аватар