Дана Хатухова
Дана Хатухова | Репутация: 99 (Без статуса) 20 сентября 2011 в 21:55
выполнять два действия: "+1", "*2". Составьте программу получения из числа 1 числа 100 за наименьшее количество операций.
Алмас Сапаргали
Алмас Сапаргали | Репутация: 104 (Кандидат) 20 сентября 2011 в 22:16

1*2+1*2*2*2+1*2*2

Aa Aa
Aa Aa | Репутация: 2135 (Эксперт) 20 сентября 2011 в 22:49

Cудя по всему, самый простой алгоритм - это обратное действие: получение из числа 100 числа 1 через деление на 2 и вычитание 1, если частное получается нечётным: 100/2=50/2=25-1=24/2=12/2=6/2=3-1=2/2=1.
Кстати, ещё один вариант на 8 действий: ((1+1+1)*2*2*2+1)*2*2=100 :-)

Иван Барилов
Иван Барилов | Репутация: 108 (Кандидат) 20 сентября 2011 в 22:58

решаем с конца: начиная со 100, пока не 1
если чётное, то делим на два. Иначе - отнимаем единицу и сначала

Алмас Сапаргали
Алмас Сапаргали | Репутация: 104 (Кандидат) 20 сентября 2011 в 23:44

Кстати, ещё один вариант на 8 действий: ((1+1+1)*2*2*2+1)*2*2=100 :-)
это тоже самое что и мой ответ)) просто я неправильно оформил, на моем  примере смотрите только на порядок) (не на приоритет)

Хачатур Саркисян
Хачатур Саркисян | Репутация: 0 (Кандидат) 21 сентября 2011 в 00:36

((1*2+1)*2*2*2+1))*2*2=100.

Aa Aa
Aa Aa | Репутация: 2135 (Эксперт) 21 сентября 2011 в 08:44

Комментарий для Almas_Sapagali:
Я изначально понял, что вы имели в виду. Обратите внимание на начало обеих вариантов:
у вас (1*2+1)
у меня (1+1+1)
Т.е. в начале мы получаем 3, но разными способами. У вас умножение и сложение, у меня два сложения. Но, в итоге получаем равное количество действий.