Определить номер строки матрицы, сумма элементов которой максимальна - C (СИ)
Формулировка задачи:
Задача: Написать программу, которая определяет номер строки прямоугольной
матрицы случайных действительных чисел A[N][M], сумма элементов
которой максимальна. Вывести на экран эту строку отдельно.
Пока что дошло до этого...
Не знаю, как совместить выделение памяти для матрицы и нахождение строки с максимальной суммой элементов. Если возможно, то желательно написать всю программу на C, буду премного благодарен.
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
typedef int *pInt;
void main()
{
int M, N, i, j;
int random (int N) {return rand() % N;}
pInt *A;
printf("Введите размер матрицы, сперва количество строк, потом количество строчек");
scanf("%d%d", &M, &N);
A = new pInt[M];
for ( i = 0; i < M; i++ )
A[i] = new int[N];
int random ( int N ) { return rand() % N; }
}Решение задачи: «Определить номер строки матрицы, сумма элементов которой максимальна»
textual
Листинг программы
/*Задача: Написать программу, которая определяет номер строки прямоугольной
матрицы случайных действительных чисел A[N][M], сумма элементов
которой максимальна. Вывести на экран эту строку отдельно.*/
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
int i;
int j;
int m;
int n;
int k;
int str_sum;
int max_str;
int max_str_id;
int fill_matr(void){ //Функция заполняет матрицу
srand (time( NULL )*k/1000);// инициализация функции rand значением
int matr_number = rand();
return matr_number; //вернуть число
}
int main(int argc, char** argv[])
{
setlocale(LC_ALL, "RUS");
puts("Введите количество столбцов матрицы:");
scanf("%d",&m);
puts("Введите количество строк матрицы:");
scanf("%d",&n);
int str_sum[m];
int matrix[m][n];
for (i = 0; i < m; i++ ){
for (j=0; j<n; j++){
matrix[i][j]=fill_matr();//заполняем матрицу
k++;
}
printf( "\n" );
}
printf( "Вот такой массив у нас получился:\n" );
for ( i = 0; i < m; i++ ) {
str_sum[i]=0;
for ( j = 0; j < n; j++ )
{
printf( "[%d][%d]=%d ", i, j, matrix[i][j] );
str_sum[i]+=matrix[i][j];//вычисляем сумму эл-тов строки
}
printf( "\nсумма элементов строки: %d \n", str_sum[i] );
}
int x;
max_str=str_sum[0];
for ( x = 0; x < m; x++ ) {
if (max_str<str_sum[x]){
max_str=str_sum[x];
max_str_id=x;
}
}
printf( "Максимальная сумма элементов строки =%d и номер этой строки - %d \n \n",max_str,max_str_id);
for(i=0; i<m; i++)
{
printf( "[%d][%d]=%d ", max_str_id, i, matrix[max_str_id][i] );
}
}
Объяснение кода листинга программы
- Ввод количества столбцов и строк матрицы с помощью функции scanf.
- Создание матрицы и заполнение ее с помощью функции fill_matr, которая возвращает случайное число для каждого элемента матрицы.
- Вычисление суммы элементов каждой строки матрицы с помощью двух вложенных циклов и функции scanf.
- Поиск строки с максимальной суммой элементов с помощью двух вложенных циклов и функции if.
- Вывод на экран строки с максимальной суммой элементов с помощью функции printf.