An problem about date
时间限制:
2000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
acm的iphxer经常忘记某天是星期几,但是他记那天的具体日期,他希望你能写个程序帮帮他。
-
输入
- 每行有三个整数 year,month,day,日期在1600年1月1日到9600年1月1日之间; 输出
-
2011 3 6 1949 10 1 2011 4 1 1945 8 15
样例输出
-
0 6 5 3
蔡勒公式是一种计算任何一日属一星期中哪一日的算法,由蔡勒(Julius Christian Johannes Zeller)推算出。
公式都是基于公历的置闰规则来考虑。
公式中的符号含义如下:
- w:星期(计算所得的数值对应的星期:0-星期日;1-星期一;2-星期二;3-星期三;4-星期四;5-星期五;6-星期六)[1]
- c:年份前两位数
- y:年份后两位数
- m:月(m的取值范围为3至14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
- d:日
- [ ]:称作高斯符号,代表向下取整,即,取不大于原数的最大整数。
- mod:同余(这里代表括号里的答案除以7后的余数)
w = ( w % 7 + 7 ) % 7
若w为负数,则取w的相反数。
#include <stdio.h> int main (void) { // freopen("题目219.txt","r",stdin); int year,month,day,i,week,y,c,w; while(scanf("%d%d%d",&year,&month,&day)!=EOF) { if(month==1) { month=13; year--; } else if(month==2) { month=14; year--; } y=year%100; c=year/100; w=((c/4)-2*c+y+(y/4)+(13*(month+1)/5)+day-1); w = ( w % 7 + 7 ) % 7; if(w<0) w=-w; printf("%d\n",w); } return 0; }
输出对应的星期,用一个整数表示;(星期一到星期六用1-6表示,星期日用0表示)
样例输入