#cpp
Та самая старая задача про улитку (на C++): Улитка ползёт по вертикальному шесту высотой h метров, поднимаясь за день на a метров, а за ночь спускаясь на b метров. На какой день улитка доползёт до вершины шеста? Программа получает на вход натуральные числа h, a, b и должна вывести одно натуральное число. Гарантируется, что a>b. При решении этой задачи нельзя пользоваться условной инструкцией if и циклами. Решение есть, но я не могу его понять. Можете подробно объяснить что и как? решение: 1 + h0 / shag + (h0 % shag + shag - 1) / shag)
Ответы
Ответ 1
Это же элементарная задача, часто встречающаяся на школьных олимпиадах по информатике( 7-8 класс! ). Решается она выводом нехитрой формулы: UPD: Спасибо пользователю @avp, который обнаружил фатальную ошибку в моем старом коде =) Исправленный вариант: double a = 5, b = 4, h = 1; double days = ((h-a)>=0) ? h-a:0; days = ceil(days/(a-b))+1; cout<Ответ 2
h0 = h - a; вся высота шеста минус расстояние за день = сколько надо дней в идеальном случае, т.е. без того, что она сползает shag = a - b; сколько фактически проползает за сутки 1+h0/shag+(h0%shag+shag-1)/shag формула, которая считает, то что надо =)
7 12 3 при подстановке дает ответ 2, а должен быть 1))))
ОтветитьУдалить