ZeroJudge D669: Alarm Clock

同題:UVa 11677 – Alarm Clock

Daniela 在一家大醫院當護士,工作時間常變來變去。更糟的是她睡得很沉,鬧鐘很難叫醒她。

最近她收到了一個有多種鬧鈴聲的數位時鐘,希望它可以解決她的問題。由於近來較為疲累,她希望善用休息時間。她隨身帶著這個鬧鐘,只要有休息時間,她就設好該醒來的時間並試著入睡。不過當她越焦急地想睡著,她越是睡不著。

她一直苦惱地想知道如果她可以立刻睡著,在鬧鐘響以前她可以有幾分鐘的睡眠。但是她的算術不好,所以請你寫一個程式,根據現在的時間及鬧鈴的時間算出她可以睡幾分鐘

範例測資

範例輸入範例輸出
EOF 輸入,每筆測資一行,含有四個整數 H1、M1、H2 、及 M2。
H1:M1 代表現在的「時與分」
H2:M2 代表鬧鈴所設的時間「時與分」
(0 ≤ H1, H2 ≤ 23, 0 ≤ M1, M2 ≤ 59)
最後一行含有四個以空格分開的 0,代表輸入的結束。
對於每筆測資,你的程式要把 Daniela 可以睡的分鐘數單獨輸出於一行
1 5 3 5
23 59 0 34
21 33 21 10
0 0 0 0
120
35
1417

解題思路

可以將兩個時間都換算成最小的單位 (分鐘),當目前的時間大於鬧鐘的時間的時候代表會換日,所以鬧鐘的時間要加一天 (24*60),最後輸出鬧鐘的分鐘數減掉目前時間的分鐘數即可。

範例程式碼-ZeroJudge D669: Alarm Clock

#include <iostream>
using namespace std;

int main() {
    int h1, m1, h2, m2;
    while (cin >> h1 >> m1 >> h2 >> m2)
    {
        if (h1 == 0 && m1 == 0 && h2 == 0 && m2 == 0) break;
        int one, two;
        if (h1 == 0) one = (24*60) + m1;
        else one = (60*h1) + m1;
        if (h2 == 0) two = (24*60) + m2;
        else two = (60*h2) + m2;
        if (two < one) two += (60*24);
        cout << two - one << "\n";
    }
}

//ZeroJudge D669
//Dr. SeanXD

發佈留言