ZeroJudge D669: Alarm Clock

題目敘述

本題採EOF方式收資料,每筆資料有四個正整數分別代表目前的時間和鬧鐘會響的的時間 (小時和分鐘),當四個數字都等於0時停止收資料。要求輸出介於目前的時間和鬧鐘設定的時間相差幾分鐘,有些資料會換日。


範例輸入 #1

1 5 3 5

23 59 0 34

21 33 21 10

0 0 0 0

範例輸出 #1

120

35

1417


解題思路

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

解題程式碼如下 (僅供參考):

#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 M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天