Вопрос Программирование C++ / не могу решить задачу

Регистрация
30 Июл 2013
Сообщения
62
Репутация
0
Спасибо
0
Монет
0
Не пойму, почему ответ должен быть 8? И как сделать чтобы было 8?

Улитка



Улитка ползет по вертикальному шесту высотой H метров, поднимаясь за день на A метров, а за ночь спускаясь на B метров. На какой день улитка доползет до вершины шеста?



Формат входных данных



Программа получает на вход целые неотрицательные числа H, A, B, причем H > B. Числа не превосходят 100.



Формат выходных данных



Программа должна вывести одно натуральное число. Гарантируется, что A > B.



Sample Input:

10

3

2

Sample Output:

8



Мое решение:

#include <iostream>



using namespace std;



int main() {



int h, a, b;



cin >> h >> a >> b;



cout << h / (a - b);



return 0;

}
 
А что - разве нельзя эту задачу решить при помощи хотя бы, например, итерационного цикла, да и вообще любым корректным методом, пусть и проигрывающий в скорости исполнения, но зато абсолютно надёжным вместо того, чтобы клепать какие-то невнятные и неверные формулы? Такой вот дополнительно-вспомогательный программный код всегда может пригодиться для проверки более толкового и эффективного варианта программы:
#include <iostream>
int main() { int h, height = 0, a, b, c = 0;
std::cin >> h >> a >> b; for(;;) { c++; height += a;
if (height >= h) break; height -= b; } std::cout <<
c << std::endl; cin.get(); cin.get(); return 0; }
 
Потому что когда она доползла до верха - дальше не ползёт вниз. Последний рывок нужно считать отдельно, к примеру, 1 + (h - a) / (a - b) (при этом отдельно проверять, что h > a, иначе возвращать 1, дабы в минус не уйти)
 
Залезет ли улитка за один день на 3-х метровый шест? Да, потому что сразу ползет на три метра вверх. А значит формула подьема - h = a + (a-b)*day
тоесть высота = высота дневного подьема + ежедневное приращение * количество дней
 
Если A>H, то доползёт в первый день, иначе
N - количество дней, за которые улитка доползёт
Она ползёт (N-1) суток, по (A-B) метров в сутки
и часть или целый день на X E (0; A] метров
Итого: математически три варианта
1)(H-A)<0 - доползёт в первый день N=1
2) (H-A)/(A-B) - целое => доползёт за N=(H-A)/(A-B)+1 дней.
3) (H-A)/(A-B) - рациональное >0 => доползёт менее, чем за
N=((H-A) делим на цело (A-B))+1 дней


Помимо (A>B и H>B) нужно проверить условие(A>H):


----------------------------------------------------------
Алгоритм:
Если A>H, то N=1
иначе N=((H-A) делим на цело на (A-B))+1
-------------------------------------------------------------
Проверка
H=10 A=3 B=2
A>H - нет, следовательно
N=((10-3) делим на цело на (3-2))+1=8
Ответ совпадает.
 
Назад
Сверху