Дан двумерный массив. найти: а) минимальную сумму элементов строки; б) максимальную сумму элементов столбца. обе решить двумя с использованием дополнительного одномерного массива; 2) без использования дополнительного одномерного массива.

ПиЗоНтИк ПиЗоНтИк    2   09.09.2019 20:30    0

Ответы
Samiko280106 Samiko280106  07.10.2020 03:56
/ 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.

Пример
Количество строк и столбцов в массиве: 5 8
*** Исходный массив ***
 -89  16  35  74 -76  -3  -3 -25
  54 -24  12  13  63 -60   4  92
  74  82  12  12  -1  11 -29 -19
 -72 -79  -3 -22  71 -53  57 -30
  65 -25   2 -25  82 -73   4 -23

Минимальная сумма по строкам -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.

Пример
Количество строк и столбцов в массиве: 7 4
*** Исходный массив ***
 -44  32 -66 -71
  56 -99  83  27
 -30  39 -65 -95
 -40   6  37  37
  75  23 -86  80
 -12  98 -65  28
  47 -85  25  -6

Минимальная сумма по строкам -151
Максимальная сумма по колонкам 52
ПОКАЗАТЬ ОТВЕТЫ
Tara2017 Tara2017  07.10.2020 03:56
Кодяра ниже

#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;
}

Кодяра выше
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика