回复 3楼 double聪
没算
不过我算过好多题 从来出过错
我还想请你看完后核对下你的计算
以下是我自己总结的
另附两道题
蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。
公式 W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1
或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
符号意义
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪-1(前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
d:日
[ ]代表取整,即只要整数部分。
下面以中华人民共和国成立100周年纪念日那天(2049年10月1日)来计算是星期几,过程如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年国庆)是星期五。
再比如计算2006年4月4日,过程如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=6+[6/4]+[20/4]-2*20+[26*(4+1)/10]+4-1
=-12 (除以7余2,注意对负数的取模运算!)
[编辑本段]
适用范围
不过,蔡勒公式只适合于1582年(我国明朝万历十年)10月15日之后的情形。罗马教皇格里高利十三世在1582年组织了一批天文学家,根据哥白尼日心说计算出来的数据,对儒略历作了修改。将1582年10月5日到14日之间的10天宣布撤销,继10月4日之后为10月15日。
后来人们将这一新的历法称为“格里高利历”,也就是今天世界上所通用的历法,简称格里历或公历。
计算代码
http://acm.hdu.
What day is it
Time Limit: 3000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2039
Accepted Submission(s): 599
Problem Description
Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me what day it is ?
Input
There are multiply cases.
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).
Output
Output one line.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
Sample Input
2007 11 17
Sample Output
Saturday
Author
LGX
Source
HDU 2007-11 Programming Contest_WarmUp
#include <stdio.h>
char b[7][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
bool m[] = {false,true,false,true,false,true,false,true,true,false,true,false,true};
int main()
{
int year,month,day;
while(~scanf("%d%d%d",&year,&month,&day))
{
if((year == 0 || month == 0 || day == 0) || (month == 2 && day>29) ||
(!m[month] && day == 31) ||
(!(year%4 == 0 && year%100 != 0 ||year%400 == 0)&&month == 2 && day == 29)
)
{
printf("illegal\n");
continue;
}
if (month<3)
{
year -= 1;
month += 12;
}
int c = year/100,y = year%100;
int w = c/4 - 2*c +y +(y/4) +(26*(month+1)/10) + day-1;
printf("%s\n",b[(w%7+7)%7]);
}
}
http://www.
GG's Single Day
时间限制:1000 ms
|
内存限制:65535 KB
描述
那是2009年11月11日的夜晚,刚上完JAVA课的gg孤独的走在从六号楼到大运村的路上,这是一条gg再熟悉不过的路,但今天的gg却感慨满怀,这是gg有生以来的第二十个Single Day了,还有多少个Single Day在等着我们的gg呢?大家拭目以待吧!(以上纯属YY)
今天需要大家帮gg一个忙,2009年11月11日是星期三,而这是他一个星期中课业最重的一天,一天10课时……gg想知道的是,N年后的Single Day还会是星期三吗?如果不是,又是星期几呢?N年后的gg,欢迎大家展开丰富的想象!(继续YY中,勿扰……)
输入
输入共t+1行,第一行是一个整数t,表示共有t组数据。下面t行,每行一个int类型的正整数N(1<=t<=10^4,0<=N<=10^9)。
输出
输出对应的星期数,星期一是1,星期二是2,……,星期日是7。
样例输入
1
1
样例输出
4
#include <stdio.h>
int b[] = {7,1,2,3,4,5,6};
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
n+=2009;
int c = n/100,y = n%100;
int w = c/4 - 2*c +y +(y/4) +(26*(11+1)/10) + 11-1;
printf("%d\n",b[(w%7+7)%7]);
}
}