盐水滴注时间计算:从代码到实际应用

Description

cjc因为背词组背得太努力,不留神得病了一秒5000赞,不得不去挂盐水的时侯,看着盐水一滴一滴,机智的他想,假如盐水滴上去很有规律,先是滴一滴,停一下;之后滴二滴,停一下;再滴三滴,停一下...一秒5000赞,现今有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速率是1秒(假定最后一滴不到D毫升,则耗费的时间也算1秒),停一下的时间也是1秒这瓶水哪些时侯能挂完呢?

Input

盐水滴注时间计算:从代码到实际应用

多组输入

每行输入两个整数代表VUL和D,其中0

Output

输出盐水挂完须要的时间。

代码区

#include
using namespace std;
int main()
{
    int vul, d;
    while (cin >> vul >> d)
    {
        int sum = 0; // 统计滴入了多少毫升的水
        int i, j;    // 题目中水是一波一波滴入的,我们先找到最后一波滴入的水,假设是i滴,再从i滴中找到当滴入j滴瓶空了
        int times = 0;
        for (i = 1;; i++)
        {
            sum += d * i;
            if (sum >= vul) // 滴入i波水时发现空了,那么是在i波中第几滴时空的呢
            {
                break;
            }
        }
        sum -= i * d;//把最后一波水先减掉,慢慢一滴一滴滴入
        for (j = 1; j <= i; j++)
        {
            if (sum + (j - 1) * d < vul && sum + j * d >= vul)//发现滴入第j滴时大于等于vul,j-1滴时小于vul
                break;
        }
        times += i - 1; //一共有i波
        times += ((i - 1) / 2.0) * i + j;//一共有多少滴
        cout << times << endl;
    }
}