トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ARC-002-A うるう年
■■■問題■■■
高橋君は忘れっぽい性格なので、うるう年は2月29日の存在を毎回忘れてしまいます。
そこで、自動でうるう年かどうかをコンピュータに教えてもらえるようにしたいと思います。
入力として与えられた年がうるう年かそうでないかを判断しなさい。
ただし、うるう年は以下の規則で決定します。
●規則 1: 4で割り切れる年はうるう年である。
●規則 2:100で割り切れる年はうるう年ではない。
●規則 3:400で割り切れる年はうるう年である。
●規則 4:規則1〜3のいずれも満たさない場合は,うるう年ではありません。
ただし、規則1〜3の内に複数満たすものがあれば後の規則 (数字の大きな規則) が優先されます。
例えば、2000年は規則3を満たすのでうるう年です。
2100年は規則2を満たしますが、規則3を満たさないのでうるう年ではありません。
■■■入力■■■
Y
●年を表す整数 Y(1000 <= Y <= 2999) が1行で与えられる。
■■■出力■■■
与えられた年がうるう年ならば'YES'、そうでなければ 'NO'を標準出力に1行で出力せよ。
なお、最後には改行を出力せよ。
C#のソース
using System;
using System.Collections.Generic;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("1001");
//NO
//1001を4で割ると250あまり1になり、
//規則1を満たさないので、うるう年ではありません。
}
else if (InputPattern == "Input2") {
WillReturn.Add("2012");
//YES
//●2012を4で割ると503になり割り切れるので規則1を満たします。
//●しかし、100では割り切れないので規則2は満たさず、うるう年になります
}
else if (InputPattern == "Input3") {
WillReturn.Add("2100");
//NO
//●2100は4で割り切れるので、規則1を満たします。
//●また、100で割ると21になり割り切れるので、規則2を満たします。
//●しかし、400では割り切れず規則3を満たさないので、うるう年ではありません。
}
else if (InputPattern == "Input4") {
WillReturn.Add("2000");
//YES
//●2000は4で割り切れるので、規則1を満たします。
//●また、100でも400でも割り切れるので規則2も3も満たします。
//●よって、2000年はうるう年になります。
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int Y = int.Parse(InputList[0]);
if (DateTime.IsLeapYear(Y))
Console.WriteLine("YES");
else Console.WriteLine("NO");
}
}
解説
IsLeapYearメソッドで、うるう年かを判定してます。