© К. Поляков, 2009-2012 B13 (повышенный уровень, время – 7 мин) Тема: Анализ дерева решений. Что нужно знать: уметь строить дерево решений уметь искать одинаковые числа в списке уметь считать разные числа в списке Пример задания: У исполнителя Калькулятор две команды: 1. прибавь 3, 2. вычти 2. Первая из них увеличивает число на экране на 3, вторая – уменьшает его на 2 (отрицательные числа допускаются). Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 1 с помощью программы, которая содержит ровно 5 команд? Решение (1 способ, построение полного графа решения): 1) будем строить дерево решений следующим образом: выясним, какое число можно получить из начального значения 1 за 1 шаг: -2 1 -1 +3 4 2) теперь посмотрим, что удается получить за 2 шага; учитывая, что (-2+3)=(+3-2), одно из значений повторяется: мы можем получить -1 + 3 = 2 и 4 – 2 = 2, то есть получается не дерево, а граф: -2 1 +3 -1 -3 4 2 7 так с помощью программ, содержащих ровно 2 команды, можно получить 3 различных числа 3) строим еще уровень: программы из 3-х команд дают 4 разных числа: -2 1 -1 +3 4 2 -3 -5 0 7 5 10 обратим внимание, что числа на каждом уровне отличаются друг от друга на 5 =(+3-(-2), то есть они не могут повторяться 4) четвертый уровень дает 5 различных чисел: -2 1 -1 4 2 -3 -5 -7 +3 0 -2 7 5 3 10 8 13 5) и пятый – 6 решений: 1 http://kpolyakov.narod.ru © К. Поляков, 2009-2012 1 -2 +3 -1 4 2 -3 -5 0 -7 -9 7 5 -2 10 3 -4 8 1 13 6 11 16 6) Ответ: 6. Решение (2 способ, краткий): 1) как следует из приведенных построений, если система команд исполнителя состоит из двух команд сложения/ вычитания, то все возможные программы, содержащие ровно N команд , дают N+1 различных чисел 2) Ответ: 6. Решение (3 способ, Л.В. Зенцова, лицей № 36 ОАО "РЖД" г.Иркутска): 1) для сложения справедлив переместительный (коммутативный) закон, значит, порядок команд в программе не имеет значения 2) поэтому существует всего 6 возможных программ, состоящих ровно из 5 команд (с точностью до перестановки): 11111 11112 11122 11222 12222 22222 3) Ответ: 6. Ещё пример задания: У исполнителя Калькулятор две команды: 1. прибавь 1 2. умножь на 2. Первая из них увеличивает число на экране на 1, вторая – удваивает его. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит ровно 4 команд? Решение (1 способ, построение полного графа решения): 1) будем строить дерево решений следующим образом: выясним, какое число можно получить из начального значения 1 за 1 шаг: 2 +1 *2 3 4 2) теперь посмотрим, что удается получить за 2 шага: +1 2 *2 3 4 4 6 5 8 в отличие от предыдущей задачи, здесь порядок выполнения операций влияет на результат, поэтому пока все числа получаются разные 2 http://kpolyakov.narod.ru © К. Поляков, 2009-2012 3) делаем 3-й шаг, получаем 8 разных чисел: 2 +1 *2 3 4 4 5 6 8 7 5 12 6 8 10 9 16 4) на 4-ом шаге рассматриваем все возможные программы из 4-х команд, получаем числа 6, 10, 9, 16, 8, 14, 13, 24, 7, 12, 11, 20, 10, 18, 17, 32 5) здесь всего 16 чисел, но одно из них (10) повторяется 2 раза, а остальные встречаются по 1 разу, поэтому получаем 15 различных чисел 6) Ответ: 15. Ещё пример задания (ege.yandex.ru): У исполнителя Калькулятор две команды: 1. прибавь 6 2. вычти 3. Первая из них увеличивает число на экране на 6, вторая – уменьшает на 3. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 1 с помощью программы, которая содержит ровно 10 команд? Решение: 1) особенность этой задачи – у дополнении к условию: «Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране» 2) сначала решим задачу без этого ограничения; поскольку две команды 1 и 2 можно переставлять (последовательное применение команд 1 и 2 дает тот же результат, что и последовательной применение команд 2 и 1), число различных чисел, которые можно получить с помощью программы из N = 10 команд равно N+1 = 11 (см. разборы задач, приведенные выше) 3) проблема в том, что из этих 11 чисел нужно выбросить все отрицательные, так как при появлении отрицательного числа исполнитель выходит из строя 4) минимальное число получается, если применить к начальному числу 10 команд 2: 1 – 10·3 = –29 5) соседние числа в дереве (см. выше) отличаются на 6 – (–3) = 9, поэтому эти 11 чисел –29 –20 –11 –2 7 16 25 34 43 52 61 6) из них только 7 чисел положительные 7) Ответ: 7. Решение (2 способ): 1) заметим, что поскольку две команды 1 и 2 можно переставлять (последовательное применение команд 1 и 2 дает тот же результат, что и последовательной применение команд 2 и 1), число различных чисел, которые можно получить с помощью программы из N = 10 команд равно N+1 = 11 (см. разборы задач, приведенные выше) 2) разница между соседними числами равна (+6)-(-3)=9 (команды +6 и -3) 3) начальное число – 1, наибольшее число можно получить, применив 10 команд увеличения на 6; получается число 1 + 10·6 = 61 3 http://kpolyakov.narod.ru © К. Поляков, 2009-2012 4) строим ряд чисел – арифметическую прогрессию с разностью (–9): 61 52 43 34 25 16 7 … все остальные значения отрицательные 5) таким образом, можно получить только 7 положительных чисел 6) это значение можно посчитать сразу, не выписывая все числа; ответим на вопрос «Сколько раз можно отнять 9 от числа 61, чтобы получить первое отрицательное число» – получим 7, так как 61 – 9·7 = –2 7) Ответ: 7. 4 http://kpolyakov.narod.ru © К. Поляков, 2009-2012 Задачи для тренировки1: 1) У исполнителя Калькулятор две команды: 1. прибавь 2 2. прибавь 3. Первая из них увеличивает число на экране на 2, вторая – на 3. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит ровно 10 команд? 2) У исполнителя Калькулятор две команды: 1. прибавь 1 2. прибавь 2. Первая из них увеличивает число на экране на 1, вторая – на 2. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит не более 4 команд? 3) У исполнителя Калькулятор две команды: 1. прибавь 2 2. умножь на 3. Первая из них увеличивает число на экране на 2, вторая – утраивает его. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит ровно 3 команды? 4) У исполнителя Калькулятор две команды: 1. прибавь 2 2. умножь на 3. Первая из них увеличивает число на экране на 2, вторая – утраивает его. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит не более 4 команд? 5) У исполнителя Калькулятор две команды: 1. прибавь 1 2. прибавь 4. Первая из них увеличивает число на экране на 1, вторая – на 4. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит не более 3 команд? 6) У исполнителя Калькулятор две команды: 1. умножь на 2 2. умножь на 3. Первая из них умножает число на экране на 2, вторая – утраивает его. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит ровно 3 команды? 7) У исполнителя Калькулятор две команды: 1. умножь на 2 2. умножь на 3. Первая из них умножает число на экране на 2, вторая – утраивает его. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит не более 3 команд? 8) У исполнителя Калькулятор две команды: 1. прибавь 4, 2. вычти 3. Первая из них увеличивает число на экране на 4, вторая – уменьшает его на 3 (отрицательные числа допускаются). Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 1 с помощью программы, которая содержит ровно 7 команд? 9) У исполнителя Калькулятор две команды: 1. прибавь 4, 1 Источники заданий: 1. Тренировочные работы МИОО 2011-2012. 2. Авторские разработки. 5 http://kpolyakov.narod.ru © К. Поляков, 2009-2012 10) 11) 12) 13) 14) 15) 16) 2. вычти 3. Первая из них увеличивает число на экране на 4, вторая – уменьшает его на 3. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 0 с помощью программы, которая содержит ровно 17 команд? У исполнителя Калькулятор две команды: 1. прибавь 2, 2. вычти 4. Первая из них увеличивает число на экране на 2, вторая – уменьшает его на 4. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 5 с помощью программы, которая содержит ровно 20 команд? У исполнителя Калькулятор две команды: 1. прибавь 3, 2. вычти 2. Первая из них увеличивает число на экране на 3, вторая – уменьшает его на 2. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит ровно 18 команд? У исполнителя Калькулятор две команды: 1. прибавь 5, 2. вычти 3. Первая из них увеличивает число на экране на 5, вторая – уменьшает его на 3. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 4 с помощью программы, которая содержит ровно 30 команд? У исполнителя Калькулятор две команды: 1. прибавь 3, 2. вычти 4. Первая из них увеличивает число на экране на 3, вторая – уменьшает его на 4. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 5 с помощью программы, которая содержит ровно 15 команд? У исполнителя Калькулятор две команды: 1. прибавь 3, 2. вычти 2. Первая из них увеличивает число на экране на 3, вторая – уменьшает его на 2. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 3 с помощью программы, которая содержит ровно 25 команд? У исполнителя Калькулятор две команды: 1. прибавь 4, 2. вычти 2. Первая из них увеличивает число на экране на 4, вторая – уменьшает его на 2. Если в ходе вычислений появляется отрицательное число, он выходит из строя и стирает написанное на экране. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 8 с помощью программы, которая содержит ровно 16 команд? У исполнителя Калькулятор две команды: 1. умножь на 6, 6 http://kpolyakov.narod.ru © К. Поляков, 2009-2012 2. подели на 2. Первая из них увеличивает число на экране в 6 раз, вторая – уменьшает его в 2 раза. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 512 с помощью программы, которая содержит ровно 6 команд? 17) У исполнителя Калькулятор две команды: 1. умножь на 15, 2. подели на 2. Первая из них увеличивает число на экране в 15 раз, вторая – уменьшает его в 2 раза. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 4096 с помощью программы, которая содержит ровно 12 команд? 18) У исполнителя Калькулятор две команды: 1. умножь на 8, 2. подели на 3. Первая из них увеличивает число на экране в 8 раз, вторая – уменьшает его в 3 раза. Программа для Калькулятора – это последовательность команд. Сколько различных чисел можно получить из числа 729 с помощью программы, которая содержит ровно 6 команд? 7 http://kpolyakov.narod.ru