Переставить строки матрицы по убыванию произведения элементов строк - C (СИ)
Формулировка задачи:
Помогите написать. Задать значения элементов массива А (м х n) случайным образом. Упорядочить элементы по след. закону - переставить строки матрицы по убыванию произведений элементов строк. Заранее спасибо!
Решение задачи: «Переставить строки матрицы по убыванию произведения элементов строк»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 5
#define N 5
int main(void) {
int arr[M];
int A[M][N];int i,j,temp,f;
for(i=0;i<M;i++) {
arr[i]=1;
}
srand(time(NULL));
printf("Исходный массив:\n\n");
for(i=0;i<M;i++) {
for(j=0;j<N;j++) {
A[i][j]=rand()%5+1;
printf("%d ",A[i][j]);
}
printf("\n");
}
printf("\n");
for(i=0;i<M;i++) {
for(j=0;j<N;j++) {
arr[i]*=A[i][j];
}
}
for(i=0;i<M;i++) {
for(f=0;f<M;f++) {
if(arr[i+1]>arr[i]) {
for(j=0;j<M;j++) {
temp = A[i][j];
A[i][j]=A[i+1][j];
A[i+1][j]=temp;
}
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
printf("Получившийся массив:\n\n");
for(i=0;i<M;i++) {
for(j=0;j<N;j++) {
printf("%d ",A[i][j]);
}
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
- Подключаются необходимые библиотеки
- Определяются размеры матрицы
- Инициализируется массив arr с единицами
- Инициализируется матрица A случайными числами от 1 до 6
- Перебираются строки матрицы A, произведение элементов каждой строки сохраняется в переменной arr
- Перебираются строки матрицы A, если произведение элементов следующей строки больше текущего, выполняется перестановка строк
- Выводится полученная матрица