1)人生の時計
あなたの一生を24時間にたとえると今日は何時何分何秒ですか?
ただしあなたはあなたの誕生日(a年b月c日)の0時ちょうどに生まれてn歳まで生きる(n歳のときは生きていてn+1歳にはなれない)とし、bとcは一般的な月日の範囲とします。
ただしあなたはあなたの誕生日(a年b月c日)の0時ちょうどに生まれてn歳まで生きる(n歳のときは生きていてn+1歳にはなれない)とし、bとcは一般的な月日の範囲とします。
i) 1990<=a & a<=2000,n=80のとき、今日は何時何分何秒ですか?
ii)
1900<=a & a<=2000 ,n=200のとき、今日は何時何分何秒ですか?
2)解き方
C++を利用して解いた。
有名なヘッダファイルであるctimeは、Unix時間という制約がかかるため、tm構造体だけを利用した。
(死ぬ時間 - 生年月日) : (現在時刻 - 生年月日) = 24時間 (24*60*60秒) : x時間
であり、このx時間を求めれば良い。
3)疑問点
n歳まで生きる(n歳のときは生きていてn+1歳にはなれない)
これは、死ぬのが誕生日前日の23時59分59秒でいいのだろうか。
どこで区切れば良いのか分からなかった為に死ぬ日を設定出来るというメンバ関数を用意した。
ただし、本問題中では前日であると判断したので出力ファイルには書かれていない。
4)苦労した点
Unix時間のことを忘れていた。
i)しか見ていなかった為、問題無いだろうと判断してしまった。
この為、ソースが汚くなってしまった。
また、日付計算関数などを自分で用意するという事になってしまった。
5)ライセンス
BSDライセンス *最初の頃に載せていたソースにあったライセンスは、Google IncのMozcからコピーさせてもらったもので、Google Incとか書かれていたけど、何も関係ないです。ごめんなさい。
6)出力ファイル
Input
Birth Day
Death Age:80<2075/12/2>
Output
Input
Birth Day
Death Age:80<2075/12/31>
Output
Input
Birth Day
Death Age:80<2079/7/30>
Output
ii)1900<=a<=2000,n=200
Input
Birth Day
Death Age:200<2147/5/6>
Output
Input
Birth Day
Death Age:200<2180/6/31>
Output
1946年はソニー創業日らしい、1979年7月1日はウォークマンの日らしい、1994年12月3日はプレステの日らしい
7)ソースファイル