トップページに戻る    次のC++のサンプルへ    前のC++のサンプルへ

Problem19 20世紀で初日が日曜日の月を列挙

問題

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


ソース

#include <stdio.h>

int Zeller(int pSY,int pM,int pD);

void main()
{
    int cnt = 0;
    for(int SY=1901;SY<=2000;SY++){
        for(int M=1;M<=12;M++){
            int Week = Zeller(SY,M,1);
            if (Week == 0)
                printf("%d回目 %4d-%02d-%02d\n",++cnt,SY,M,1);
        }
    }
}

int Zeller(int pY,int pM,int pD)
{
    if (pM <= 2){
        pM+=12;
        pY--;
    }

    return (pY+pY/4-pY/100+pY/400+(13*pM+8)/5+pD)%7;
}


実行結果

省略
166回目 1997-06-01
167回目 1998-02-01
168回目 1998-03-01
169回目 1998-11-01
170回目 1999-08-01
171回目 2000-10-01


解説

ツェラーの公式を使ってます。