寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C #Volume0_0027 What day is today?

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題
 2004 年 1 月 1 日から 12 月 31 日までの日付を入力し、その日の曜日を出力するプログラムを作成して下さい。
 なお、2004 年 1 月 1 日は木曜日です。
 また、2004 年はうるう年ですので 2 月29 日があることに注意して下さい。

・入力される値
 複数のデータセットを処理しなければなりません。
 1つのデータセットに月と日が1つのスペースで区切られて1行に与えられます。
 月が 0 となったとき入力の最後とします(この場合は処理をしないでプログラムを終了させる)。
 データセットの数は 50 を超えません。

・期待する出力
 各データセットごとに曜日を英語で1行に出力して下さい。
 以下の訳を参考にして出力して下さい。
   月曜日 Monday
   火曜日 Tuesday
   水曜日 Wednesday
   木曜日 Thursday
   金曜日 Friday
   土曜日 Saturday
   日曜日 Sunday

僕が作成、提出したコードは、以下のとおりです。

/*
 Volume0_0027 What day is today?
 http://judge.u-aizu.ac.jp/
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<stdio.h>
int main(void){
    int m,d,sum,date;
    int month[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    while(1){
        scanf("%d %d",&m,&d);
        if(m==0 && d==0){
            break;
        }
        sum=0;
        date=0;
        for(int i=0;i<m-1;i++){
            sum+=month[i];
        }
        sum+=d;
        date=sum%7;
        if(date==1){
            printf("Thursday\n");
        }else if(date==2){
            printf("Friday\n");
        }else if(date==3){
            printf("Saturday\n");
        }else if(date==4){
            printf("Sunday\n");
        }else if(date==5){
            printf("Monday\n");
        }else if(date==6){
            printf("Tuesday\n");
        }else if(date==0){
            printf("Wednesday\n");
        }
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
Volume0_0027 What day is today?