2011年7月27日 星期三

Alarm Clock

內容 : 
Daniela 在一家大醫院當護士,工作時間常變來變去。更糟的是她睡得很沉,鬧鐘很難叫醒她。
最近她收到了一個有多種鬧鈴聲的數位時鐘,希望它可以解決她的問題。由於近來較為疲累,她希望善用休息時間。她隨身帶著這個鬧鐘,只要有休息時間,她就設好該醒來的時間並試著入睡。不過當她越焦急地想睡著,她越是睡不著。

她一直苦惱地想知道如果她可以立刻睡著,在鬧鐘響以前她可以有幾分鐘的睡眠。但是她的算術不好,所以請你寫一個程式,根據現在的時間及鬧鈴的時間算出她可以睡幾分鐘。
輸入說明 :
輸入含有多筆測資,每筆測資一行,含有四個整數 h1m1h2 及 m2h1:m1代表現在的時與分,h2:m2則代表鬧鈴所設的時間 (時與分),(0≤h1≤23, 0≤m1≤59, 0≤h2≤23, 0≤m2≤59)。
最後一行含有四個以空格分開的 0,代表輸入的結束。
輸出說明 :
對於每筆測資,你的程式要把 Daniela 可以睡的分鐘數單獨輸出於一行。
範例輸入 :
1 5 3 5 
23 59 0 34 
21 33 21 10 
0 0 0 0
範例輸出 :
120 
35 
1417

3 則留言:

  1. 要注意就是那個鬧鐘時間比現在時間早
    第一次做第三個答案紙有23

    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, h1, m1, h2, m2
    If Not (h1 = m1 And m1 = h2 And h2 = m2 And m2 = 0) Then
    If h1 = 0 Then h1 = 24
    If h2 = 0 Then h2 = 24
    ans = (h2 - h1) * 60 + (m2 - m1)
    If ans < 0 Then ans = ans + 1440
    Print #2, ans
    Else
    Exit Do
    End If
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  2. Dim s
    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)
    Dim ans
    Line Input #1, n
    s = Split(n)


    If s(0) = 0 And s(1) = 0 And s(2) = 0 And s(3) = 0 Then Exit Do



    If s(2) > s(0) Then
    ans = (s(2) - s(0)) * 60 + Abs(s(3) - s(1))

    ElseIf s(2) = s(0) And s(3) > s(1) Then
    ans = s(3) - s(1)
    Else
    ans = (23 - Abs(s(2) - s(0))) * 60 + 60 - Abs(s(3) - s(1))
    End If

    Print #2, ans


    Loop

    Close
    Close


    End
    End Sub


    ---\
    1 5 3 5
    23 59 0 34
    21 33 21 10
    5 1 5 2
    5 1 5 0
    0 0 0 0

    輸出:

    120
    35
    1417
    1
    1439

    回覆刪除
  3. 佑、arro好,
    兩個程式都對。
    數學一點的算式:
    ans = ((h2 - h1) * 60 + (m2 - m1)+1440) mod 1440

    一次就解決。

    回覆刪除