このページについて

このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。

見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。

挑戦する課題

レベルアップ問題集日付セットから「閏年の判定 (paizaランク D 相当)」を取り上げます。

以下は、問題公開 Web ページからの引用です。

問題

西暦yが与えられるので、閏年ならYesを、平年ならばNoを出力してください。

閏年か平年かは次のような条件によって判定することができます。

  • 西暦が4で割り切れる年は閏年
  • ただし、100で割り切れる年は平年
  • ただし、400で割り切れる年は閏年
  • 西暦が4で割り切れない年は平年

入力される値

整数yが1行で入力されます。

期待する出力

閏年ならYesをそうでないなら、Noを出力してください。

考え方

率直にやるなら、4つの条件を順番に判断する。割り切れるか否かの判断には剰余( % )を用いる。

しかし、「ただし」という条件があるので、順番に判断する場合には、一度結果を入れる変数を用意しておき、判定によって結果を上書きするような流れとなる。

つまり、

  • 西暦が4で割り切れれば閏年 ⇨  閏年にセット
    • ただし、100で割り切れる年は平年 ⇨ 平年にセット
      • ただし、400で割り切れる年は閏年 ⇨ 閏年にセット

となるので、このパターンだと全て評価を終えるまで結果を表示することはできない。

一方、4つの評価の順番は次のように入れ替えることができる。

  • いかなる年でも、400で割り切れれば閏年(400で割り切れる年は必ず4でも割り切れる。また、100で割り切れても400で割り切れれば閏年)
  • あるいは、100で割り切れない年で、かつ4で割り切れる年は閏年

このよう入れ替えると、判定年を i とするとき、閏年は次のように記述できる

解答例

ベタに判定する例だと次の通り。

 

評価を入れ替えた場合は次の通り。