杭电acm_step1.2.2

来源:互联网 发布:零基础学算法 第三版 编辑:程序博客网 时间:2024/06/07 05:17

先上原题:

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 120 3 10 0 0
 
Sample Output
1719

题目大意:有一只可怜的小虫子掉到了深井里面,但是好在它还有足够的活力与旺盛的精力爬上来,不管 这口井有多么的深,可是(关键)它每次向上爬一分钟就得休息一分钟,在休息的时候呢,它的身体会往下滑,它每次向上爬u英寸,就会向下滑d英寸 ,(如果最后爬上井而不足一分钟的话,算一分钟)


每行你要输入三个数字,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;}