タイトル説明
私たちは今、ロシアのデートのグレゴリオスタイルを使用しています。閏年4で割り切れる数と年間ですが、100で割り切れない、または400で割り切れる
たとえば、年2004、2180と2400は飛躍です。年2004、2181と2300は飛躍ではありません。
あなたの仕事は、デートについて、今日の合意を使って最寄りの過去や未来に指定した日付に対応する曜日を計算するプログラムを書くことです。
エントリー
1本のラインが一日の数d、月名のMと年の番号y(1000≤y≤3000)が含まれてあります。月名は大文字から始まる対応する英語名です。
輸出
出力日付に対応する曜日の英語名を持つ単一の行は、大文字から始まります。他のすべての文字は小文字でなければなりません。
サンプル入力
2012年12月21日 2013年1月5日
サンプル出力
金曜日 土曜日
#include <stdio.h>
#include <string.h>
int mmonth[13][2]= {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
char date[10][20] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int isLeapyear(int year) //判断是否是闰年
{
if((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
int _month(char m[])
{
char M[14][15]= {"", "January","February","March","April","May","June","July","August","September","October","November","December"};
int i;
for(i=1; i<13; i++)
if(strcmp(m,M[i])==0)
break;
return i;
}
int main()
{
int day,year;
char m[20];
while(scanf("%d %s %d",&day,m,&year)!=EOF)
{
int flag=0;
int d1=31,m1=8,y1=2018; //2018-8-31是周五
int month=_month(m);
int time1=0,time2=0;
time1+=year*10000+month*100+day;
time2+=y1*10000+m1*100+d1;
if(time1>time2) //如果第一个年份大于第二个年份,则交换
{
flag=1; //flag标识两个日期是否交换
int tmp;
tmp=year;
year=y1;
y1=tmp;
tmp=month;
month=m1;
m1=tmp;
tmp=day;
day=d1;
d1=tmp;
}
int count=0;
while(year<y1||month<m1||day<d1) //日期一直执行加1操作,直到年月日均相同
{
day++; //执行天数加1
if(day==mmonth[month][isLeapyear(year)]+1) //判断日是否等于当年月份最后一天
{
month++;
day=1;
}
if(month==13) //月份是否满12个月
{
year++;
month=1;
}
count++; //统计相差结果
}
count%=7;
int result; //result计算周几
if(flag==1)
result=(count+5)%7;
else
result=(12-count)%7;
printf("%s\n",date[result]);
}
return 0;
}
結果: