Предмет: Информатика, автор: Qantos

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

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

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

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

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

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

Примеры
Ввод
Вывод
32718
17
1
0
5
3


AyseKoseoglu: azerice danissana

Ответы

Автор ответа: LymarIvan
1

#include <iostream>

using namespace std;

int main()

{

long n, answer = 0;

cin >> n;

while (n != 1)

{

 if (n % 3 == 0)

 {

  n /= 3;

  answer++;

 }

 else if (n % 2 == 0)

 {

  n /= 2;

  answer++;

 }

 else

 {

  n--;

  answer++;

 }

}

cout << answer;

}

P. S. обрати внимание на вложения

Приложения:

Sofines15: этот код рабочий
LymarIvan: во-первых, ничего менять не нужно. на каждой итерации с числом проделывается ровно одно действие: или оно делится на 2, или на 3, или от него отнимается 1
LymarIvan: дальше надо обязательно проверить, вышла ли единица, или ещё нет
LymarIvan: ведь n могло равняться 2, например, после деления на 2 получим единицу
LymarIvan: она не делится ни на 2, ни на 3 и если бы там не было else, то добавилось бы лишняя действие
LymarIvan: лишнее* так как мы начинаем с числа 1, а программа делает всё в обратном порядке
LymarIvan: во-вторых, я нашел такую задачу на одном из сайтов, где можно отправлять код на проверку и он будет автоматически проверен
LymarIvan: и как видно с прикреплённого скрина, именно этот код (там было чуть больше команд, которые здесь не требуются) принят на 100%
inf67ekb: Контрпример, при 10 программа будет выдавать неверный ответ
(((10//2)-1)//2)//2 - 4 действия, хотя короче (10-1)//3//3 - 3 действия.
LymarIvan: ты прав. ну тогда ставь флажок
Похожие вопросы
Предмет: Қазақ тiлi, автор: карина484
Предмет: Русский язык, автор: ярик103