Задача «Калькулятор»

прибавить к числу X единицу;
умножить число X на 2;
умножить число X на 3.
Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N.
Входные данные:
Программа получает на вход одно число, не превосходящее 106.
Выходные данные:
Требуется вывести одно число: наименьшее количество искомых операций.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Задача «Калькулятор»
Долго не могу решить, и ничего годного нигде не нашёл. Имеется калькулятор, который выполняет.

Задача по Python Текстовый калькулятор
Прошу помощи в задаче, начал решение, но совершенно не знаю как выполнить до конца её. Заранее.

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

Задача Калькулятор
Добрый день! Пытаюсь решить задачу Калькулятор: Задание связано с обратной польской нотацией.
Status 418
![]()
4570 / 2338 / 601
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3

Сообщение было отмечено sgedsc как решение
Решение
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Задача 2. «Калькулятор+»
Задание: Добавить в приложение «Калькулятор» дополнительные кнопки: (код=8730), (код=177), .

Задача 1. «Калькулятор»
Задание: Написать приложение с графическим интерфейсом «Калькулятор». Оно должно содержать.
Егэ задача про калькулятор
сказали что неправильно решена, на как такое возможно?
Задача «Калькулятор с восстановлением ответа»
Имеется калькулятор, который выполняет три операции: Прибавить к числу X единицу. Умножить.
Задача калькулятор ООП
Здравствуйте, пишу простейший калькулятор, вычисляющий выражение, заданное определенным правилом.
Задача строковый калькулятор
вот такой код, у меня не получается вывести методы, я голову уже сломал хотя понимаю что всё очень.
Или воспользуйтесь поиском по форуму:
Имеется калькулятор который выполняет три операции
Разбор добавил Влад Макеев
Простая динамика, где A[i] — сколько нужно операций чтобы получить это число.
- Прибавить к числу X единицу.
- Умножить число X на 2.
- Умножить число X на 3.
Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N.
Входные данные
Программа получает на вход одно число, не превосходящее 10 6 .
Выходные данные
Требуется вывести одно число: наименьшее количество искомых операций.
Имеется калькулятор который выполняет три операции
Разбор добавил Влад Макеев
Задача Аналогичеа предыдущей, только выводя ответ, мы просматриваем числа X из которых могло быть получено обрабатываемое число K и если A[X] + 1 = A[K] то K было получено из X.
- Прибавить к числу X единицу.
- Умножить число X на 2.
- Умножить число X на 3.
Определите кратчайшую последовательность операций, необходимую для получения из числа 1 заданное число N.
Входные данные
Программа получает на вход одно число N, не превосходящее 10 6 .
Выходные данные
Выведите строку, состоящую из цифр «1», «2» или «3», обозначающих одну из трех указанных операций, которая получает из числа 1 число N за минимальное число операций. Если возможных минимальных решений несколько, выведите любое из них.
Пример
Как решить задачу калькулятор на питон
Надо придумать функцию которая решает задачу и запрограммировать её.
fn — минимальное чиcло шагов для получения n из единицы. Что про неё можно сказать?
- f1 = 0 — это, я думаю, объяснять не нужно.
- fk+1 ≤ 1 + fk — потому что fk+1 не может быть больше, иначе нарушится требование минимальности (обоснование опущено, но вы должны это хорошо понимать);
- f2k ≤ 1 + fk — следущее правило, обоснование аналогично;
- f3k ≤ 1 + fk — аналогично.
Все условия переведены на язык формул. Вычисление f:
def f(n): if n == 1: return 0 v = f(n - 1) if n % 2 == 0: v = min(v, f(n // 2)) if n % 3 == 0: v = min(v, f(n // 3)) return v + 1 print(f(int(input())))
Для маленьких n работает хорошо, после сотни тормозит, для больших чисел падает с переполнением стека. Теория хороша, практика не очень.
Проблема в том что мы очень много раз вычисляем одни и те же значения fn. Можно сделать оценку, что количество вызовов растет как e n . Чтобы избавится от повторных вызовов, значения функции надо запоминать в кэше:
import functools @functools.lru_cache(None) def f(n): if n == 1: return 0 v = f(n - 1) if n % 2 == 0: v = min(v, f(n // 2)) if n % 3 == 0: v = min(v, f(n // 3)) return v + 1 print(f(int(input())))
Кэш всё ускоряет, но проблема с глубиной рекурсии остаётся. Чиним её: вычисляем значения f последовательно от единицы до n, вычисленные значения храним в списке cache и используем по необходимости. Рекурсии нет и нет проблем с её глубиной:
def f(n): cache = [0] * (n + 1) for i in range(2, n + 1): v = cache[i - 1] if i % 2 == 0: v = min(v, cache[i // 2]) if i % 3 == 0: v = min(v, cache[i // 3]) cache[i] = v + 1 return cache[-1] print(f(int(input())))