#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. Если Вам ответ, отметьте его как лучший и жмякните на " " . Это мотивирует продолжать давать ответы дальше.
program Prog;
var i, MinElement: Integer;
arr: array[1..15] of Integer;
begin
{ задаем значение минимального элемента. изначально
оно дожно быть максимально возможным, так как мы будем
все элементы с ним сравнить и вычислять, какой из них наименьший.
для этого после того, как мы нашли элемент меньше чем имеющийся минимум,
то мы этот минимум изменяем на найденное нами число }
MinElement:=High(Integer); { т.к. будем работать с Integer, то максимум будем брать у Integer,
но вообще еще можно присвоить ему значение первого элемента массива и сравнивать потом с ним }
randomize; { это чтоб заполнить рандом. числами }
// запоолнение массива рандомом
for i:=1 to 15 do begin
arr[i]:=random(100); { для примера числа будут от 0 до 99 }
{ здесь мы как раз сравниваем с имеющимся минимум и меняем его,
если нашли элемент меньше }
if arr[i]<MinElement then
MinElement:=arr[i]
end;
// вывод всего массива
for i:=1 to 15 do
write(arr[i], ' ');
writeln;
// вывод минимума
writeln('Минимальный элемент: ', MinElement);
end.
Простая программа, для начала мы считаем первое значение сразу в min(это сделано чтобы не давать минимуму значение какой-то константы), затем запускаем цикл, в котором будем вводить число и тут же проверять его на наше условие (поиск минимума). Ну и в конце выводим результат, если что-то непонятно - в комментарии.
var
x, min, i : integer;
begin
writeln('Введите 15 значений: (каждое на новой строке): ');
readln(min);
for i := 1 to 14 do
begin
readln(x);
if min > x then
min := x;
end;
writeln('Минимальное число в последовательности:', min);
end.
#include <cstdio>
#include <algorithm>
using namespace std;
int a[30][30], n, m;
int main() {
scanf(" %d %d", &n, &m);
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
scanf(" %d", &a[i][j]);
for(int i = 1; i < m; i++) a[0][i] += a[0][i - 1];
for(int i = 1; i < n; i++) a[i][0] += a[i - 1][0];
for(int i = 1; i < n; i++)
for(int j = 1; j < m; j++)
a[i][j] += min(a[i - 1][j], a[i][j - 1]);
printf("%d", a[n - 1][m - 1]);
return 0;
}
Объяснение: