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?