先上原题:
Problem Description
An inch worm is at the bottom of a well n inches deep. It has enough energy to climb u inches every minute, but then has to rest a minute before climbing again. During the rest, it slips down d inches. The process of climbing and resting then repeats. How long before the worm climbs out of the well? We'll always count a portion of a minute as a whole minute and if the worm just reaches the top of the well at the end of its climbing, we'll assume the worm makes it out.
|
Input
There will be multiple problem instances. Each line will contain 3 positive integers n, u and d. These give the values mentioned in the paragraph above. Furthermore, you may assume d < u and n < 100. A value of n = 0 indicates end of output.
|
Output
Each input instance should generate a single integer on a line, indicating the number of minutes it takes for the worm to climb out of the well.
|
Sample Input
10 2 1 20 3 1 0 0 0 |
Sample Output
17 19 |
每行你要输入三个数字,n,u,d,分别表示井深,向上的速度和滑下的速度,采取多组输入的形式,当n,为0时停止输入。
分析:比较简单,每上一分钟停一次,那么在最后一次将要爬出井口时,向上爬的时间与下滑的时间是一样的。那么完全爬出井口就是算作向上爬的时间比下滑的时间多一分钟,因此可以根据这个关系列出方程,从而得到答案。
#include<iostream>
using namespace std;
int main()
{
int n, u, d;
while (cin >> n)
{
if (n == 0)
break;
cin >> u >> d;
int x, y;
x = (n - d) / (u - d);
y = x - 1;
if ((x*u - d*y) < n)
{
x = x + 1;
y = x - 1;
}
cout << x + y << endl;
}
return 0;
}