スポンサー広告

    スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    Project Euler(プロジェクト・オイラー)【Problem16~Problem20】

    C言語でProject Euler 【Problem19】

    Project Euler(プロジェクトオイラー)のproblem19
    C言語を使っています。

    /* Problem 19 † */
    /*
    次の情報が与えられている。

    ・1900年1月1日は月曜日である。
    ・9月、4月、6月、11月は30日まであり、2月を除く他の月は31日まである。
    ・2月は28日まであるが、うるう年のときは29日である。
    ・うるう年は西暦が4で割り切れる年に起こる。

    しかし、西暦が400で割り切れず100で割り切れる年はうるう年でない。
    20世紀(1901年1月1日から2000年12月31日)で月の初めが日曜日になるのは何回あるか。
    */


    #include <stdio.h>
    #include <conio.h>
    int uruChk(int);

    int uruChk(int yyyy)
    {
        if(yyyy % 400 != 0 && yyyy % 100 == 0)
            return 28;
        else if(yyyy % 4 == 0)
            return 29;
        else
            return 28;
    }

    int main(void)
    {
        int y, m, d;
        int i, cnt = 0;
        int d1;

        i = 0;

        for(y = 1900; y <= 2000; y++){
        for(m = 1; m <= 12; m++){
                if(m == 9 || m == 4 || m == 6 || m == 11)
                    d1 = 30;
                else if(m == 2)
                    d1 = uruChk(y);
                else
                    d1 = 31;

                for(d = 1; d <= d1; d++){
                    i++;
                    if(i % 7 == 0){
                        if(d == 1 && y >= 1901)
                            cnt++;
                        i = 0;
                    }
                }
            }
        }

        printf("%d\n", cnt);

        getch();
        return 0;
    }



    <<解>> 171


    Project Euler(プロジェクトオイラー)Problem19です。
    C言語で書いています。

    我ながら美しくないコード
    そのまんま書いただけ・・って感満載

    その上、解が合わない・・と思っていたら、求めるのは1900年からではなく、1901年からでした。

    いかにも素人なコードなんですが、どうしたらいいんでしょう。
    アドバイス等ありましたら、ぜひともご教授ください



    ☆応援お願いします☆
    にほんブログ村 IT技術ブログ C/C++へ
    にほんブログ村


    スポンサーサイト

    カテゴリ

    最新記事

    WiMAX & WiFi & モバイル

    便利ソフトいろいろ

    最新トラックバック

    最新コメント

    カウンター

    BlogRancking



    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。