srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

yukicoder No.405 ローマ数字の腕時計

問題

問題概要

時計の針が何時を指しているかを求める問題。

解法

modを取って計算していく。時計の針の{"XII", "I","II","III","IIII","V","VI","VII","VIII","IX","X","XI"}を先頭から順にmod12を利用して、0,1,2.......,11とする。これをさらに、T時間後はそのmodの値にtを加えて、mod12を取ることで、針の位置がわかる。

ミス

特になし。

コード

#include <iostream>
#include <string>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);i++)

int main(void){
    char d[12][5] = {"XII", "I","II","III","IIII","V","VI","VII","VIII","IX","X","XI"};
    string s; cin >> s;
    int t; cin >> t;
    int mod;
    rep(i, 12){
        if(s == d[i]) mod = i;
    }
    mod += t + 1200;//tのずれだけ足す。modが負にならないように大きめの数を足す
    mod %= 12;//(mod12)を取る
    cout << d[mod] << endl;
    return 0;
}