// PascalABC.NET 3.1, сборка 1213 от 04.04.2016 begin var m,n:integer; Write('Ввведите число строк и столбцов: '); Read(m,n); var a:=MatrixRandom(m,n,-99,99); var Vrow:=ArrFill(m,0); var Vcol:=ArrFill(n,0.0); for var i:=0 to m-1 do begin var max:=-100; for var j:=0 to n-1 do begin Write(a[i,j]:4); if a[i,j]>max then max:=a[i,j] end; Writeln; Vrow[i]:=Max end; Writeln('Вектор из наибольших значений строк'); Vrow.Println; for var j:=0 to n-1 do begin var s:=a[0,j]; for var i:=1 to m-1 do s+=a[i,j]; Vcol[j]:=s/m end; Writeln('Вектор из средних арифметических по столбцам'); Vcol.Println end.
Я сделал это задание с рекурсии. Функция бесконечно вызывает сама себя и ищет наиболее оптимальный вариант. Фактически это просто подбор, но более сложно реализованный.
P. s. Если Вам ответ, отметьте его как лучший и жмякните на " " . Это мотивирует продолжать давать ответы дальше.
begin
var m,n:integer;
Write('Ввведите число строк и столбцов: ');
Read(m,n);
var a:=MatrixRandom(m,n,-99,99);
var Vrow:=ArrFill(m,0);
var Vcol:=ArrFill(n,0.0);
for var i:=0 to m-1 do begin
var max:=-100;
for var j:=0 to n-1 do begin
Write(a[i,j]:4);
if a[i,j]>max then max:=a[i,j]
end;
Writeln;
Vrow[i]:=Max
end;
Writeln('Вектор из наибольших значений строк');
Vrow.Println;
for var j:=0 to n-1 do begin
var s:=a[0,j];
for var i:=1 to m-1 do s+=a[i,j];
Vcol[j]:=s/m
end;
Writeln('Вектор из средних арифметических по столбцам');
Vcol.Println
end.
Тестовое решение:
Ввведите число строк и столбцов: 5 8
-82 67 -78 27 69 -80 85 34
70 -82 -89 -30 -57 31 14 33
-4 -1 -93 -21 81 -66 48 31
58 18 -40 -63 -68 40 46 -44
85 46 31 -61 1 43 2 -94
Вектор из наибольших значений строк
85 70 81 58 85
Вектор из средних арифметических по столбцам
25.4 9.6 -53.8 -29.6 5.2 -6.4 39 -8
#include <iostream>
using namespace std;
int data[20][20], x, y, minValue = -1;
void calc(int px, int py, int value){
value += data[px][py];
int temp = data[px][py];
if(px == x - 1 && py == y - 1) {
if(value < minValue || minValue == -1)
minValue = value;
return;
}
data[px][py] = -1;
if(px + 1 < x && data[px + 1][py] != -1) calc(px + 1, py, value);
if(py + 1 < y && data[px][py + 1] != -1) calc(px, py + 1, value);
data[px][py] = temp;
}
int main(){
cin >> x >> y;
for (int i = 0; i < x; ++i)
for (int j = 0; j < y; ++j)
cin >> data[i][j];
calc(0, 0, 0);
cout << minValue;
return 0;
}
Объяснение:
Я сделал это задание с рекурсии. Функция бесконечно вызывает сама себя и ищет наиболее оптимальный вариант. Фактически это просто подбор, но более сложно реализованный.
P. s. Если Вам ответ, отметьте его как лучший и жмякните на " " . Это мотивирует продолжать давать ответы дальше.