Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Если сумма элементов матрицы А размерности nxn больше удвоенной суммы максимального и минимального элементов матрицы, то все строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом, в противном случае матрицу оставить без изменения.

Решение задачи: «Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом»

textual
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6.     const unsigned n = 4;
  7.     int min = 32767, max = -32767, sum = 0;
  8.     unsigned i = 0, j = 0;
  9.  
  10.     int matr[][n] = { {1, 2, 3, 1},
  11.                      {2, 2, 1, 3},
  12.                      {2, 1, 3, 2},
  13.                      {1, 2, 3, 2} };
  14.     for (i = 0; i < n; i++)
  15.     {
  16.         for (j = 0; j < n; j++)
  17.         {
  18.             sum += matr[i][j];
  19.             if (max < matr[i][j]) max = matr[i][j];
  20.             if (min > matr[i][j]) min = matr[i][j];
  21.         }
  22.     }
  23.  
  24.    
  25.     if (sum > 2 * (min + max))
  26.     {
  27.         for (i = 0; i < n; i++)
  28.         {
  29.             const unsigned tmpn = max - min + 1;
  30.             unsigned *tmp;
  31.             tmp = (unsigned*)calloc(tmpn, sizeof(unsigned));
  32.             for (j = 0; j < tmpn; j++)
  33.                 tmp[j] = 0;
  34.  
  35.             for (j = 0; j < n; j++)
  36.                 ++tmp[matr[i][j] - min];
  37.            
  38.             unsigned k = 0;
  39.             for (j = 0; j < tmpn; j++)
  40.             {
  41.                 while (tmp[j] && k < n)
  42.                 {
  43.                     matr[i][k++] = j + min;
  44.                     tmp[j]--;
  45.                 }
  46.                
  47.             }
  48.             free(tmp);
  49.         }
  50.         for (i = 0; i < n; i++)
  51.         {
  52.             for (j = 0; j < n; j++)
  53.                 printf("\t%i", matr[i][j]);
  54.  
  55.             printf("\n");
  56.         }
  57.     }
  58.  
  59.     getchar();
  60.     return 1;
  61. }

Объяснение кода листинга программы

  1. В начале программы объявляются переменные:
    • const unsigned n - размерность матрицы;
    • int min и max - для отслеживания минимального и максимального значения в матрице;
    • unsigned i и j - для обхода матрицы;
    • int matr[][n] - сама матрица;
    • unsigned k - для подсчета количества элементов в строке при сортировке;
    • unsigned *tmp - временный массив для сортировки;
    • int main() - функция main, в которой находится основной код программы.
  2. В основной функции сначала вычисляются сумма элементов матрицы и минимальное и максимальное значения.
  3. Затем проверяется условие для сортировки матрицы: сумма элементов не должна превышать 2*(минимальное значение + максимальное значение).
  4. Если условие выполняется, то матрица сортируется.
  5. Для сортировки используется временный массив tmp, в котором размещаются числа от минимального значения до максимального с шагом в 1.
  6. Затем, для каждой строки матрицы, в порядке возрастания, начиная с минимального значения, добавляются числа из временного массива, пока не будет исчерпан временный массив или не будет заполнена строка.
  7. После сортировки матрица выводится на экран.
  8. В конце программы требуется нажать любую клавишу для выхода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы