[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>2問目

2問目(曜日判定)

問題

2004年1月1日から2004年12月31日までの日付を入力し、その日の曜日を出力して終了するプログラムを作成してください。なお、2004年1月1日は木曜日です。また、2004年はうるう年です。

入力


月(整数)
日(整数)

出力

曜日

入力例


1
2

出力例

金曜日

解き方例

重要な前提条件として、毎月の日数が分からなければなりません。それが分かれば、後は目的の日までの経過日数をカウントし、7で余り算すればいいです。

ソースコード

お持ち帰り

C/C++

その1

#include <stdio.h>

int main(){
    int m;//月
    int d;//日
    int o;//総日数
    char s[7][3] ={"水","木","金","土","日","月","火"};


    scanf("%d",&m);
    scanf("%d",&d);

    o=d;
    switch(m){//breakをつけないのがポイント
    case 12:
        o+=30;
    case 11:
        o+=31;
    case 10:
        o+=30;
    case 9:
        o+=31;
    case 8:
        o+=31;
    case 7:
        o+=30;
    case 6:
        o+=31;
    case 5:
        o+=30;
    case 4:
        o+=31;
    case 3:
        o+=29;
    case 2:
        o+=31;
    }

    printf("%s曜日\n",s[o%7]);

    return 0;
}

その2

#include <stdio.h>

int main(){
    int m;//月
    int d;//日
    int o;//総日数
    char s[7][3] ={"水","木","金","土","日","月","火"};

    //月から日を出す。
    int m2d[13] = {0,0,31,60,91,121,152,182,213,244,274,305,335};

    scanf("%d",&m);
    scanf("%d",&d);

    o = d + m2d[m];

    printf("%s曜日\n",s[o%7]);

    return 0;
}

その他

加算方法としては、三つほどあると思います。

多分case文は書くのがめんどくさく、あらかじめ加算データを用意は計算がめんどくさいです。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-7-23
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2004年予選>2問目