Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом - C (СИ)
Формулировка задачи:
Если сумма элементов матрицы А размерности nxn больше удвоенной суммы максимального и минимального элементов матрицы, то все строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом, в противном случае матрицу оставить без изменения.
Решение задачи: «Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом»
textual
Листинг программы
#include <stdlib.h> #include <stdio.h> int main() { const unsigned n = 4; int min = 32767, max = -32767, sum = 0; unsigned i = 0, j = 0; int matr[][n] = { {1, 2, 3, 1}, {2, 2, 1, 3}, {2, 1, 3, 2}, {1, 2, 3, 2} }; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { sum += matr[i][j]; if (max < matr[i][j]) max = matr[i][j]; if (min > matr[i][j]) min = matr[i][j]; } } if (sum > 2 * (min + max)) { for (i = 0; i < n; i++) { const unsigned tmpn = max - min + 1; unsigned *tmp; tmp = (unsigned*)calloc(tmpn, sizeof(unsigned)); for (j = 0; j < tmpn; j++) tmp[j] = 0; for (j = 0; j < n; j++) ++tmp[matr[i][j] - min]; unsigned k = 0; for (j = 0; j < tmpn; j++) { while (tmp[j] && k < n) { matr[i][k++] = j + min; tmp[j]--; } } free(tmp); } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf("\t%i", matr[i][j]); printf("\n"); } } getchar(); return 1; }
Объяснение кода листинга программы
- В начале программы объявляются переменные:
const unsigned n
- размерность матрицы;int min
иmax
- для отслеживания минимального и максимального значения в матрице;unsigned i
иj
- для обхода матрицы;int matr[][n]
- сама матрица;unsigned k
- для подсчета количества элементов в строке при сортировке;unsigned *tmp
- временный массив для сортировки;int main()
- функция main, в которой находится основной код программы.
- В основной функции сначала вычисляются сумма элементов матрицы и минимальное и максимальное значения.
- Затем проверяется условие для сортировки матрицы: сумма элементов не должна превышать 2*(минимальное значение + максимальное значение).
- Если условие выполняется, то матрица сортируется.
- Для сортировки используется временный массив
tmp
, в котором размещаются числа от минимального значения до максимального с шагом в 1. - Затем, для каждой строки матрицы, в порядке возрастания, начиная с минимального значения, добавляются числа из временного массива, пока не будет исчерпан временный массив или не будет заполнена строка.
- После сортировки матрица выводится на экран.
- В конце программы требуется нажать любую клавишу для выхода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д