Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом - 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. - Затем, для каждой строки матрицы, в порядке возрастания, начиная с минимального значения, добавляются числа из временного массива, пока не будет исчерпан временный массив или не будет заполнена строка.
- После сортировки матрица выводится на экран.
- В конце программы требуется нажать любую клавишу для выхода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д