Упорядочить строки матрицы по неубыванию суммы их элементов - 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;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены матрица a[N][N] и массив s[N] типа sum_item_t, инициализированный нулями.
- В цикле заполняются значениями элементов матрицы a[N][N] и суммарной суммы в s[N].
- Далее, массив s[N] сортируется в порядке возрастания суммы его элементов с помощью функции qsort() и функции сравнения cmp().
- Во втором цикле, элементы матрицы b[N][N] заполняются значениями элементов матрицы a[N][N] с индексами, соответствующими отсортированному массиву s[N].
- Выводятся значения элементов матрицы b[N][N] на экран.
- Код завершается возвратом 0, что означает успешное выполнение.