1. 程式人生 > >7-17 爬動的蠕蟲(15 分)

7-17 爬動的蠕蟲(15 分)

一條蠕蟲長1寸,在一口深為N寸的井的底部。已知蠕蟲每1分鐘可以向上爬U寸,但必須休息1分鐘才能接著往上爬。在休息的過程中,蠕蟲又下滑了D寸。就這樣,上爬和下滑重複進行。請問,蠕蟲需要多長時間才能爬出井?

這裡要求不足1分鐘按1分鐘計,並且假定只要在某次上爬過程中蠕蟲的頭部到達了井的頂部,那麼蠕蟲就完成任務了。初始時,蠕蟲是趴在井底的(即高度為0)。

樣例:

輸入 12 3 1

輸出 11

----------------------------------

/*
井深N寸,一分鐘爬U寸,歇一分鐘下落D寸,
winner =0 沒有爬上去,winner =1,爬上去了
一開始在井底,高度H為0;TIME=0
第一分鐘,TIME++,H=H+U,如果H>=N,winner=1;else,H=H-D,TIME++;
12 3 1-11
*/
#include <stdio.h>
int main()
{
    int N,U,D;
    scanf("%d %d %d",&N,&U,&D);
    int H=0;
    int time=0;
    int winner=0;
    while(winner!=1)
    {
        H+=U;
        time++;
        if(H>=N)
        {
            winner=1;
        }
        else
        {
            H=H-D;
            time++;
        }
    }
    printf("%d",time);
    return 0;
}


我被MOOC平臺中翁愷的C語言視訊影響的比較深,所以引用了winner來控制迴圈退出,但實際上不必這麼麻煩,在檢視CSDN各位大神的程式碼後,我稍微修改,如下

#include <stdio.h>
int main()
{
    int N,U,D;
    scanf("%d %d %d",&N,&U,&D);
    int H=0;
    int time=0;
    while(1)
    {
        H+=U;
        time++;
        if(H>=N)
        {
            break;
        }
        else
        {
            H=H-D;
            time++;
        }
    }
    printf("%d",time);
    return 0;
}