Дан двумерный массив. найти: а) минимальную сумму элементов строки; б) максимальную сумму элементов столбца. обе решить двумя с использованием дополнительного одномерного массива; 2) без использования дополнительного одномерного массива.
/ PascalABC.NET 3.3, сборка 1573 от 04.11.2017 // Внимание! Если программа не работает, обновите версию!
1. Со вс массивом
begin var (n,m):=ReadInteger2('Количество строк и столбцов в массиве:'); var a:=MatrRandom(n,m,-99,99); Writeln('*** Исходный массив ***'); a.Println(4); Writeln(4*a.ColCount*'-'); var min:=integer.MaxValue; var b:array of integer; for var i:=1 to a.RowCount-1 do begin b:=a.Row(i); // строка в одномерном массиве var s:=b.Sum; if s<min then min:=s; end; var max:=integer.MinValue; for var j:=1 to a.ColCount-1 do begin b:=a.Col(j); // колонка в одномерном массиве var s:=b.Sum; if s>max then max:=s; end; Writeln('Минимальная сумма по строкам ',min); Writeln('Максимальная сумма по колонкам ',max); end.
Минимальная сумма по строкам -131 Максимальная сумма по колонкам 139
2. Без вс массива
begin var (n,m):=ReadInteger2('Количество строк и столбцов в массиве:'); var a:=MatrRandom(n,m,-99,99); Writeln('*** Исходный массив ***'); a.Println(4); Writeln(4*a.ColCount*'-'); Writeln('Минимальная сумма по строкам ', a.Rows.Select(row->row.Sum).Min); Writeln('Максимальная сумма по колонкам ', a.Cols.Select(col->col.Sum).Max); end.
#include <iostream> using namespace std; int minSumRow1(int ** const a, const int N, const int M) { int sum = 0; int *buff = new int[N]; for (size_t i = 0; i < N; ++i) { buff[i] = 0; for (size_t j = 0; j < M; ++j) buff[i] += a[i][j]; } sum = buff[0]; for (size_t i = 1; i < N; ++i) if (sum > buff[i]) sum = buff[i]; return sum; } int minSumRow2(int ** const a, const int N, const int M) { int sum, buff; bool flag = true; for (size_t i = 0; i < N; ++i) { buff = 0; for (size_t j = 0; j < M; ++j) buff += a[i][j]; if (flag || buff < sum) { flag = false; sum = buff; } } return sum; } int maxSumCol1(int ** const a, const int N, const int M) { int sum = 0; int *buff = new int[M]; for (size_t j = 0; j < M; ++j) { buff[j] = 0; for (size_t i = 0; i < N; ++i) buff[j] += a[i][j]; } sum = buff[0]; for (size_t j = 1; j < M; ++j) if (sum < buff[j]) sum = buff[j]; return sum; } int maxSumCol2(int ** const a, const int N, const int M) { int sum, buff; bool flag = true; for (size_t j = 0; j < M; ++j) { buff = 0; for (size_t i = 0; i < N; ++i) buff += a[i][j]; if (flag || buff > sum) { flag = false; sum = buff; } } return sum; } int main() { setlocale(LC_ALL, "Russian"); const size_t N = 5, M = 6; int **a = new int*[N]; cout << "Массив" << endl; for (size_t i = 0; i < N; ++i){ a[i] = new int[M]; for (size_t j = 0; j < M; ++j){ a[i][j] = 1 + rand() % 9; cout << a[i][j] << " "; } cout << endl; } cout << endl;
cout << minSumRow1(a, N, M) << endl; cout << minSumRow2(a, N, M) << endl;
cout << maxSumCol1(a, N, M) << endl; cout << maxSumCol2(a, N, M) << endl; system("pause"); return 0; }
Кодяра выше
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку