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

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

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

Дана вещественная матрица размером 10х10. Упорядочить её строки по не убыванию суммы их элементов.

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define N 10
 
typedef struct sum_item {
    float sum;
    int idx;
} sum_item_t;
 
int cmp(const sum_item_t *i, const sum_item_t *j)
{
    return (*i).sum - (*j).sum;
}
 
int main()
{
    float a[N][N], b[N][N];
    sum_item_t s[N];
    
    for (int i=0;i<N;i++) {
        s[i].sum = 0;
        s[i].idx = i;
        for (int j=0;j<N;j++) {
            printf("a[%d][%d]=",i,j);
            scanf("%f", &a[i][j]);
            s[i].sum += a[i][j];
        }
    }
    
    qsort(s, N, sizeof(sum_item_t), (int(*)(const void *, const void *))cmp);
    
    for (int i=0;i<N;i++) {
        for (int j=0;j<N;j++) {
            b[i][j] = a[s[i].idx][j];
            printf("a[%d][%d]=%f ",i,j,b[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

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

В этом коде:

  1. Объявлены матрица a[N][N] и массив s[N] типа sum_item_t, инициализированный нулями.
  2. В цикле заполняются значениями элементов матрицы a[N][N] и суммарной суммы в s[N].
  3. Далее, массив s[N] сортируется в порядке возрастания суммы его элементов с помощью функции qsort() и функции сравнения cmp().
  4. Во втором цикле, элементы матрицы b[N][N] заполняются значениями элементов матрицы a[N][N] с индексами, соответствующими отсортированному массиву s[N].
  5. Выводятся значения элементов матрицы b[N][N] на экран.
  6. Код завершается возвратом 0, что означает успешное выполнение.

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

11   голосов , оценка 3.818 из 5
Похожие ответы