2012年11月20日 星期二

蝸牛爬竿問題(snail)

問題敘述

蝸牛沿著竹竿底部往上爬,繳幾天可以爬到竹竿頂端呢?先看看以下的範例:
一隻蝸牛從6 公尺長的竹竿底部往上爬,已知這隻蝸牛從太陽出來到太岔下山可以往上爬3 公尺,太陽下山後到隔天太陽昇起前是蝸牛的休息時間,在這段休息時間內蝸牛會下滑1 公尺。而且,蝸牛的疲勞系為10 (%),這表示從第二天開始,蝸牛每天都會少爬3 * 10 % = 0.3 公尺。請問蝸牛在第幾天以爬到竹竿頂端呢?
從下表可以看出這隻蝸牛在第三天可以爬到竹竿的頂端。天數起始高度可爬行距離累積高度下滑後高度

1 0.0 3.0 3.0 2.0
2 2.0 2.7 4.7 3.7
3 3.7 2.4 6.1

你的任務是找出蝸牛爬竿的通解,根據下列條件限制算出蝸牛在第幾天時可以順利爬到竹竿頂端或是失敗?

條件限制
1. 竹竿的高度介於6 ~ 100 公尺之間。
2. 第一天可以往上爬行的距離介於0 ~ 100 公尺之間。
3. 休息時下滑距離介於0 ~ 99 公尺之間。
4. 疲勞系數介於0 ~ 99 (%) 之間。
5. 爬行過程㆗如果下滑觸地 (高度<= 0),則判定為失數(Fail)。

輸入檔格式
輸入檔可以是一個或是多個狀況,每行代表一個狀況。每行包含四個正整數 H、U、D 和F 各以一個空白隔開;當H = 0 時代表輸入檔的結束,否則H 代表竹竿的高度,U 代表第一天蝸牛可以爬行的距離,D 代表蝸牛休息時下滑的距離,F 代表疲勞係數。

輸出檔格式
對於每一個測試狀況,輸出檔都要輸出一行判斷蝸牛成功(success)或是失敗(fail),以及這是發生在第幾天,格式如輸出範例。

輸入範例
6 3 1 10
10 2 1 50
12 6 3 10
0 0 0 0

輸出範例
success on day 3
fail on day 3
success on day 5

2 則留言:

  1. Dim tired As Double
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do
    Input #1, lenth, walk, back, tired
    If lenth = 0 Then Exit Do
    day1 = walk - back: base = day1
    tired = walk * tired / 100
    mycount = 1
    Do
    mycount = mycount + 1
    walk = walk - tired
    If base + walk > lenth Then Print #2, "success on day " & mycount: Exit Do
    base = base + walk - back
    If base + walk <= 0 Then Print #2, "fail on day " & mycount: Exit Do
    Loop
    mycount = 0
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除

  2. Dim m, t, days As Integer
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Input #1, h, u, d, f
    If h = 0 Then End
    m = 0: t = 0: days = 1
    Do
    m = m + u - t
    If m >= Val(h) Then Exit Do
    m = m - Val(d)
    If m <= 0 Then Exit Do
    t = t + Val(u) * (Val(f) / 100)
    days = days + 1
    Loop Until m >= Val(h) Or m <= 0
    If m >= Val(h) Then Print #2, "success on day " & days
    If m <= 0 Then Print #2, "fail on day " & days
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除