【日付セット】> 曜日 (paizaランク B 相当) [難易度: 1617 ±19]
※リンク先へ移動するためには[paiza]へのログインが必要です。
西暦y年m月d日が何曜日か表示してください。
ただし、各月の日数は以下のように決まることに注意してください。
・4, 6, 9, 11月は30日
・2月は閏年ならば29日、そうでなければ28日
・それ以外の月は31日
ただし、閏年は次のような年のことをいいます。
・西暦が4で割り切れる年は閏年
・ただし、100で割り切れる年は平年
・ただし、400で割り切れる年は閏年
ただし、1800年1月1日は水曜日です。
入力値(例)
2019 4 8
出力値(例)
月曜日
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php list($y, $m, $d) = explode(" ", trim(fgets(STDIN))); function isleap($y) { return ($y % 4 == 0 && $y % 100 != 0) || $y % 400 == 0; } $str_of_weekday = array("日", "月", "火", "水", "木", "金", "土"); $weekday = 2; for ($i = 1800; $i < $y; $i++) { $weekday += isleap($i) ? 366 : 365; } $days_of_month = array(0, 31, isleap($y) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); for ($i = 1; $i < $m; $i++) { $weekday += $days_of_month[$i]; } $weekday += $d; printf("%s曜日\n", $str_of_weekday[$weekday % 7]); ?> |