同題: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