X

C#でプロジェクトオイラーを解く(問題19「日曜日の数え上げ」)

どーも、みつおです。

問題

次の情報が与えられている.

  • 1900年1月1日は月曜日である.
  • 9月, 4月, 6月, 11月は30日まであり, 2月を除く他の月は31日まである.
  • 2月は28日まであるが, うるう年のときは29日である.
  • うるう年は西暦が4で割り切れる年に起こる. しかし, 西暦が400で割り切れず100で割り切れる年はうるう年でない.

20世紀(1901年1月1日から2000年12月31日)中に月の初めが日曜日になるのは何回あるか?

出典:Problem19

解答

using System;

namespace Problem19
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Solve());
            Console.ReadLine();
        }

        private static int Solve()
        {
            int ret = 0;

            DateTime start = new DateTime(1901, 1, 1);
            DateTime end = new DateTime(2000, 12, 31);

            for (DateTime now = start; now <= end; now = now.AddDays(1))
            {
                //月の1日でなければスルー
                if (now.Day != 1) continue;

                //日曜日なら+1
                if (now.DayOfWeek == DayOfWeek.Sunday) ret++;
            }

            return ret;
        }
    }
}

 

出力

171

みつお: