Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

“Улитка” - задача на C++

#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 формула, которая считает, то что надо =)

1 комментарий:

  1. 7 12 3 при подстановке дает ответ 2, а должен быть 1))))

    ОтветитьУдалить