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

Ответы

Ответ дал: Аноним
0
/ 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
Ответ дал: MaxLevs
0
Кодяра ниже
\\\\\\\\\\\\\\\
#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
Нет, я не о том, работает она или нет. Я - о пригодности С++ для массового обучения рядовых школьников.
Ответ дал: MaxLevs
0
Алгоритм прост. Если человек разбирается в C++, то проблем нет.
Ответ дал: Аноним
0
Вы не ответили прямо, но между строк все понятно)))) Спасибо.
Ответ дал: MaxLevs
0
Благодарим за обращение :D
Вас заинтересует