1. 程式人生 > >Climbing Worm

Climbing Worm

點選試做!

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

題目:
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,u,d計算蟲子爬到井口的時間。

通過舍友的幫助從runtime改為了accepted…

思路:
弄一個迴圈,爬一分鐘爬了s路程,用時t分鐘,考慮如果s>=n就跳出迴圈輸出t,否則就繼續計算,t加一,然後往下掉u英里,則實際走了s-d英里

hzu通過的程式碼如下:

#include <iostream>
using namespace std;
int main()
{
    int n, u, d, s = 0, t = 0;
    while (scanf_s("%d%d%d", &n, &u, &d))
    {
        if (n == 0) break;
        while (s < n)
        {
            t+=1;s += u;
            if (s >= n) break;
            t++;s -= d;
        }
        printf("%d\n", t);
        s = 0; t = 0;
    }
    
}