【日付セット】閏年の判定 (paizaランク D 相当) 解答例 – PHP編【paiza】
【日付セット】 > 閏年の判定 (paizaランク D 相当)
※リンク先へ移動する為には「paiza」へのログインが必要です。
Dランク問題と侮ることなかれ。「if」文で条件分岐を作る問題ですが、引っ掛け問題でもあるので注意しましょう。
解答例
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $input = trim(fgets(STDIN)); if($input % 400 == 0){ echo "Yes"; } elseif($input % 100 == 0){ echo "No"; } elseif($input % 4 == 0){ echo "Yes"; } elseif($input % 4 != 0){ echo "No"; } ?> |
解答方針
この問題で重要なのは条件分岐の順番です。今回の閏年判定の条件は次の通りです。
閏年の条件・西暦が4で割り切れる年は閏年
・ただし、100で割り切れる年は平年
・ただし、400で割り切れる年は閏年
・西暦が4で割り切れない年は平年
・ただし、100で割り切れる年は平年
・ただし、400で割り切れる年は閏年
・西暦が4で割り切れない年は平年
この条件を見てみると、「100で割り切れる年は平年」、「400で割り切れる年は閏年」と条件が被っています。例えば「400年」は「400でも100でも4」でも割り切れます。その為「if」文の条件の作り方を間違えると間違った処理が返ってきます。例えば次の例、
間違った解答例
|
1 2 3 4 5 6 7 8 9 |
if($input % 4 == 0){ echo "Yes"; } elseif($input % 4 != 0){ echo "No"; } elseif($input % 400 == 0){ echo "Yes"; } elseif($input % 100 == 0){ echo "No"; } |
「if」文構築をするときは、条件分岐の優先順位を間違えないようにしないといけませんね。