Сколько существует программ
Перейти к содержимому

Сколько существует программ

Сколько существует программ

Исполнитель Тренер преобразует число на экране.

У исполнителя есть две команды, которым присвоены номера:

1. Прибавить 1

Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя Тренер —  это последовательность команд.

Сколько существует программ, которые преобразуют исходное число 1 в число 30 и при этом траектория вычислений содержит числа 10 и 21?

Траектория должна содержать оба указанных числа. Траектория вычислений – это последовательность результатов выполнения всех команд программы. Например, для программы 212 при исходном числе 7 траектория будет состоять из чисел 14, 15, 30.

Нужно найти количество программ, которые из 1 получают 10, количество программ, которые из 10 получают 21, количество программ, которые из 21 получают 30 и перемножить найденные значения. Сначала найдём количество программ, получающих 10 из 1.

Обозначим R(n) — количество программ, которые преобразуют число 2 в число n.

Верны следующие соотношения:

1. Если n не делится на 2, то тогда R(n) = R(n — 1), так как существует единственный способ получения n из n — 1 — прибавление единицы.

2. Пусть n делится на 2.

Если n > 1, то R(n) = R(n / 2) + R(n — 1).

Если n = 1, то R(n) = 1 (два способа: прибавление единицы и удвоение).

Теперь можно постепенно вычислить все значения:

R(2) = R(1) + R(1) = 1 + 1 = 2 = R(3)

R(4) = R(2) + R(3) = 2 + 2 = 4 = R(5),

R(6) = R(3) + R(5) = 2 + 4 = 6 = R(7),

R(8) = R(4) + R(7) = 4 + 6 = 10 = R(9),

R(10) = R(5) + R(9) = 4 + 10 = 14

Программ, получающих из числа 10 число 21 достаточно мало, можно их просто перечислить: 21, 11111111111.

А программ, получающих из числа 21 в число 30 всего один способ: добавление единиц.

Задача №22. Перебор вариантов.

Задачу такого типа можно решить, построив подробное дерево всех возможных вариантов наборов команд и подсчитав те, которые приведут к нужному результату. Однако, это очень длинный и объемный способ. Его использование может привести к вычислительным ошибкам, а при большой длине программы построение дерева вообще практически невозможно.

Рассмотрим более эффективный метод подсчета количества программ.

У ис­пол­ни­те­ля Уве­ли­чи­тель две ко­ман­ды, ко­то­рым при­сво­е­ны но­ме­ра:

1. при­бавь 2,

2. умножь на 3.

Пер­вая из них уве­ли­чи­ва­ет число на экра­не на 2, вто­рая — умно­жа­ет его на 3.

Про­грам­ма для Уве­ли­чи­те­ля — это по­сле­до­ва­тель­ность ко­манд. Сколь­ко есть про­грамм, ко­то­рые число 1 пре­об­ра­зу­ют в число 31?

Заполним таблицу со следующими столбцами:

«Число» — перечень всех чисел от 1 до 31;

«Числа-источники» — числа, из которых одной из указанных команд можно получить текущее число;

«Количество способов» — количество способов, которыми можно получить текущее число из чисел-источников. Равно сумме значений «Кол-во способов» чисел-источников.

Заметим, что никаким набором указанных команд невозможно получить четное число из 1, значит, четные числа можем в таблице не рассматривать вообще.

Число

Числа-источники

Кол-во способов получения

Число 1 нам дано, т.е. его можно получить единственным способом: ничего не делая.

Число 3 можно получить из 1 двумя способами: командой 1. и командой 2. И т.д.

Заметим, что два источника могут быть только у чисел, кратным трем. Это наблюдение поможет нам быстро заполнить таблицу, т.к. количество способов увеличивается, когда рассматриваем число, кратное трем.

Например, число 9 можно получить из числа 3 и числа 7. Сложив количество способов получения чисел 3 и 7 (2+2=4), получим количество способов получения числа 9.

Полная таблица приведена для наглядности, можно было заполнить только строки с числами, кратными 3, т.к. только они меняют количество способов получения числа.

Для числа 31 получаем количество способов 12. Это и есть искомое количество программ.

У ис­пол­ни­те­ля Ариф­ме­тик две ко­ман­ды, ко­то­рым при­сво­е­ны но­ме­ра:

1. при­бавь 1,

2. при­бавь 3.

Пер­вая из них уве­ли­чи­ва­ет на 1 число на экра­не, вто­рая уве­ли­чи­ва­ет это число на 3.

Про­грам­ма для Ариф­ме­ти­ка — это по­сле­до­ва­тель­ность ко­манд.

Сколь­ко су­ще­ству­ет про­грамм, ко­то­рые число 2 пре­об­ра­зу­ют в число 15?

Заполним таблицу со следующими строками:

«Число» — перечень всех чисел от 2 до 15;

«Числа-источники» — числа, из которых одной из указанных команд можно получить текущее число;

«Количество способов» — количество способов, которыми можно получить текущее число из чисел-источников. Равно сумме значений «Кол-во способов» чисел-источников.

Число

Числа-источники

Кол-во способов получения

Для числа 15 получаем количество способов 88. Это и есть искомое количество программ.

Исполнитель Май15 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:

1. Прибавить 1

2. Умножить на 2

Первая команда увеличивает число на экране на 1, вторая умножает его на 2.

Программа для исполнителя Май15 – это последовательность команд. Сколько существует программ, для которых при исходном числе 2 результатом является число 29 и при этом траектория вычислений содержит число 14 и не содержит числа 25? Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 16, 17.

Заполним таблицу со следующими строками:

«Число» — перечень всех чисел от 2 до 29;

«Числа-источники» — числа, из которых одной из указанных команд можно получить текущее число;

«Количество способов» — количество способов, которыми можно получить текущее число из чисел-источников. Равно сумме значений «Кол-во способов» чисел-источников.

Число

Числа-источники

Кол-во способов получения

До строки с числом 15 считаем все способы получения чисел. Начиная с числа 16 и до числа 24 (включительно) числа-источники 8-12 и способ получения числа применением команды «Умножить на 2» не подходят, т.к. траектория вычисления не содержит число 14. Для этих чисел учитываем одно число-источник (предыдущее) и один способ получения – «Прибавить 1».

Числа 25 вообще не должно быть в траектории, а значит, числа 26 и 27 получить невозможно.

Для числа 28 существует одно число-источник (14).

Для числа 29 получаем количество способов 13. Это и есть искомое количество программ.

Демоверсия егэ по информатике 2020. Задание 22

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

Сколько существует программ, для которых при исходном числе 1 результатом является число 20 и при этом траектория вычислений содержит число 10?

Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 16, 17.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *