Просмотр задания
У исполнителя Калькулятор две команды:
1. прибавь 2,
2. вычти 4.

Первая из них увеличивает число на экране на 2, вторая - уменьшает его на 4. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятор - это последовательность команд. Сколько различных чисел можно получить из числа 5 с помощью программы, которая содержит ровно 20 команд ?
8 января 2016
Ответы (1)
Информатик БУ # 9 января 2016 в 13:18 +1
Нам нужно определить, сколько чисел можно получить 20-ю командами, а не количество наборов программ, как в 22.
При этом от изменения порядок команд роли не играет, главное - не получить отрицательное число.
Допустим, наборы "+2 +2 +2 -4", "+2 +2 -4 +2", "+2 -4 +2 +2" и "-4 +2 +2 +2" в результате дадут одно и то же число. Правда два последних набора дадут отрицательный результат в процессе вычислений, но на это начихать, так как первые два набора дают положительный результат.
Теперь определим, сколько всего чисел мы можем получить, даже если в результате будет получаться отрицательное число.
Даны две команды +2 и -4
Всего программа состоит из 20 команд.
Для наглядности можно расписать
+2 +2 +2 +2 ... +2 +2 +2 - программа, состоящая только из 1-х команд
-4 +2 +2 +2 ... +2 +2 +2 - программа, в которой есть одна 2-я команда
-4 -4 +2 +2 ... +2 +2 +2 - программа, в которой есть две 2-е команды
...
-4 -4 -4 -4 ... -4 -4 -4 -4 - программа, состоящая только из команд -4
Не сложно посчитать, что всего существует 21 такая программа (всего 20 команд, от +2+2+2...+2 до +4+4+4...+4, 21 набор)

Однако отрицательные числа нам не нужны. Таким образом, мы можем найти количество программ, которые дают во всех вариантах расстановки команд отрицательное число. Проще говоря, если рассматривать программы в порядке увеличения количества команд -4, то в один прекрасный момент такие программы будут давать отрицательные числа. То есть нужно найти минимальное количество команд -4, которые дадут отрицательное число.
Для этого можно решить систему
5 + x*2 - y*4 < 0
x + y = 20

y >= 8

То есть если программа будет содержать 8 или больше команд 2, то результат будет отрицательный. Можно проверить:
5 + 12*2 - 8*4 = 5 + 24 - 32 = -3 - 8 команд -4
5 + 13*2 - 7*4 = 5 + 26 - 28 = 3 - 7 команд -4

Всего программ, в которых 8 или больше команд -4 - [8..20], то есть 13
Всего программ 21
Программ, из которых получаются положительные числа - 21-13 = 8

Ответ: 8

P.S. Как-то слишком объемно расписал, увлёкся, второе решение:

5 + 2x - 4y >= 0
x = 20-y
5 + 2(20-y) - 4y >=0
45 - 6y >= 0
6y <= 45
y <= 7,5, y - целое число, значит
y <= 7 - столько команд -4 может быть для получения положительного числа.

Так как команд -4 в программе может вообще не быть, то количество команд -4 в программах можно записать как [0..7]. Выходит, что всего таких программ 8.
Перевести число из в Результат: 510 = 1012