вано139
07.11.2021 09:17

Геннадию необходимо попасть с этажа A на этаж B. Для вызова лифта на всех этажах офисного здания, кроме первого и последнего, есть две кнопки — для перемещения вниз и перемещения вверх. В тот момент, когда Геннадий нажал нужную кнопку вызова, лифт находился на этаже C и вез одного пассажира на этаж D. Если лифт проезжает мимо этажа, на котором нажата кнопка вызова, и лифт движется в подходящем направлении, то лифт останавливается, чтобы посадить дополнительного пассажира. Лифт перемещается между соседними этажами за одну единицу времени, также одну единицу времени занимает остановка лифта на этаже для высадки или посадки пассажиров.
Напишите программу, вычисляющую, через сколько времени Геннадий доберется до этажа B, при условии, что никто больше не будет вызвать лифт.

Формат ввода
Первая строка ввода содержит четыре целых числа A,B,C и D, разделенных одним пробелом (1 ≤ A,B,C,D ≤ 20,A≠B,C≠D,A≠C).
Формат вывода
Вывести одно целое число — количество единиц времени от момента вызова лифта до момента, когда Геннадий выйдет из лифта на этаже B.
Пример 2
ВВОД

3 9 2 5

ВЫВОД

10

Пример 2
ВВОД

3 9 5 2

ВЫВОД

13

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Юлия111157
26.05.2022 11:39

Так как речь идет о таблице, то лучше перебрать рекурсивно. Логично , что количество путей для клетки (i,j) - это количество путей для правой соседней клетки + количество путей для нижней соседней клетки.

При таком условии мы будем посещать те же клетки слишком часто, однако значение для них меняться не будет. Имеет смысл вычислить их единожды и запомнить для последующих использований. (На самом деле, достаточно иметь буфер вместимостью всего в 6 элементов, но мы сделаем полное запоминание).

(Иллюстрация 3 - таблица кэша)

Иллюстрации кода и возможного вывода прикреплены в дополнительных материалах.

========================

Ваши оценки и отзывы позволяют лучше оценить качество ответа.

Если ответ удовлетворил, не забудь отметить его как "Лучший".

Успехов в учёбе!

========================

Код:

cache = {}

def calculate_max_way_price(x: int, y: int, m:int, n:int):

   if (x, y) in cache:

       return cache[(x, y)]

   x_way, y_way = 0, 0

   if x < m - 1:

       x_way = calculate_max_way_price(x + 1, y, m, n)

   if y < n - 1:

       y_way = calculate_max_way_price(x, y + 1, m, n)

   if x == m - 1 and y == n - 1:

       cache[(x, y)] = 1

       return 1

   cache[(x, y)] = x_way + y_way

   return x_way + y_way

N = int(input("Enter N value: "))

M = int(input("Enter M value: "))

print(calculate_max_way_price(0, 0, N, M))


Количество маршрутов в прямоугольной таблице В прямоугольной таблице N×M вначале игрок находится в л
0,0(0 оценок)
Ответ:
elank
21.07.2022 15:15

Это если полностью опираться на условие:

#include <iostream>

using namespace std;

int main() {

       int arr[10];

       for (int i = 0; i < 10; i++) {

       arr[i] = 0;

       }

       for (int i = 1; i < 10; i += 2) {

               arr[i] = 1;

       }

       for (int i = 0; i < 10; i++) {

                  cout << arr[i];

       }

return 0;

}

Можно сделать легче - не менять значения после заполнения массива, а сразу его наполнять нулями и единицами:

#include <iostream>

using namespace std;

int main() {

int arr[10];

for (int i = 0; i < 10; i++) {

 if (i % 2 == 0) {

arr[i] = 0;

 }

else {

arr[i] = 1;

}

 cout << arr[i];

}

return 0;

}

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота