Имеется калькулятор который выполняет три операции
Перейти к содержимому

Имеется калькулятор который выполняет три операции

  • автор:

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

Author24 — интернет-сервис помощи студентам

прибавить к числу X единицу;
умножить число X на 2;
умножить число X на 3.

Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N.

Входные данные:
Программа получает на вход одно число, не превосходящее 106.

Выходные данные:
Требуется вывести одно число: наименьшее количество искомых операций.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Задача «Калькулятор»
Долго не могу решить, и ничего годного нигде не нашёл. Имеется калькулятор, который выполняет.

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

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

Задача Калькулятор
Добрый день! Пытаюсь решить задачу Калькулятор: Задание связано с обратной польской нотацией.

Status 418

Эксперт Python

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] — сколько нужно операций чтобы получить это число.

  1. Прибавить к числу X единицу.
  2. Умножить число X на 2.
  3. Умножить число X на 3.

Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N.

Входные данные

Программа получает на вход одно число, не превосходящее 10 6 .

Выходные данные

Требуется вывести одно число: наименьшее количество искомых операций.

Имеется калькулятор который выполняет три операции

Разбор добавил Влад Макеев

Задача Аналогичеа предыдущей, только выводя ответ, мы просматриваем числа X из которых могло быть получено обрабатываемое число K и если A[X] + 1 = A[K] то K было получено из X.

  1. Прибавить к числу X единицу.
  2. Умножить число X на 2.
  3. Умножить число 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()))) 

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

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