Предмет: Информатика,
автор: Daniyar23
Дан двумерный массив. Найти:
а) минимальную сумму элементов строки;
б) максимальную сумму элементов столбца.
Обе задачи решить двумя способами:
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
// Внимание! Если программа не работает, обновите версию!
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
Автор ответа:
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;
}
\\\\\\\\\\\\\\\
Кодяра выше
\\\\\\\\\\\\\\\
#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
Алгоритм прост. Если человек разбирается в C++, то проблем нет.
Автор ответа:
0
Вы не ответили прямо, но между строк все понятно)))) Спасибо.
Автор ответа:
0
Благодарим за обращение :D
Похожие вопросы
Предмет: Геометрия,
автор: egorzubkov08
Предмет: Английский язык,
автор: Maya200
Предмет: Математика,
автор: alexmmalin74rus
Предмет: Математика,
автор: Аноним
Предмет: Биология,
автор: katenachurkina1