C++與演算法

解答 - ZeroJudge - d066

解法一 - 列出每種狀況

#include<iostream>
using namespace std;


int main()
{
    int h, m;

    while( cin >> h >> m )
    {
        //At School: 7:30 ~ 17:00
        if( h<7 )
        {
            cout << "Off School" << endl;
        }
        if( h==7 and m<30 )
        {
            cout << "Off School" << endl;
        }
        if( h==7 and m>=30 )
        {
            cout << "At School" << endl;
        }
        if( h>7 and h<17 )
        {
            cout << "At School" << endl;
        }
        if( h>=17 )
        {
            cout << "Off School" << endl;
        }
    }
    return 0;
}


解法二 - 只列出上學時間當條件,其他情形就是放學時間

#include<iostream>
using namespace std;

int main()
{
    int h, m;
    while( cin >> h >> m )
    {
        // 7:30 ~ 16:59
        if( (h==7 and m>=30) or (h>=8 and h<=16) )
        {
            cout << "At School" << endl;
        }
        else
        {
            cout << "Off School" << endl;
        }
    }
    return 0;
}


解法三 - 先換算好時間再判斷

#include<iostream>
using namespace std;

int main()
{
    int h, m, tmp;

    while( cin >> h >> m )
    {
        tmp = h*60+m;
        // before 7:30 or after 17:00
        if( tmp<450 or tmp>=1020 )
        {
            cout << "Off School" << endl;
        }
        else
        {
            cout << "At School" << endl;
        }
    }
    return 0;
}