| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4814 人关注过本帖
标题:蔡勒公式是不是有问题???
只看楼主 加入收藏
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:4 
蔡勒公式是不是有问题???
百度可知蔡勒公式:
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)   
若要计算的日期是在1582年10月4日或之前,公式则为   w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d+2  
以1572年9月3日为界:   
        1572年9月3日后:w = (d + 2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;  
        1572年9月3日前:w = (d+2*m+3*(m+1)/5+y+y/4+5) % 7;
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六   
c:世纪(前两位数)  
y:年(后两位数)   
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)   
d:日   
[ ]代表取整,即只要整数部分。

计算了以后发现2048-1-31和2048-2-1星期相同。。。。怎么回事??????
搜索更多相关主题的帖子: 百度 
2012-03-25 18:59
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
呵呵  我相信肯定是你算错了

                                         
===========深入<----------------->浅出============
2012-03-25 19:08
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
收藏
得分:0 
回复 2楼 laoyang103
你算了么?要我给你列公式么?
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1;
2048-1-31: c=20,y=48,m=1,d=31; w=5-40+48+12+5+31-1;
2048-2-1:  c=20,y=48,m=2,d=1;  w=5-40+48+12+7+1-1;

w%7后是一样的。。。。。
2012-03-25 19:22
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 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]);
    }
}

                                         
===========深入<----------------->浅出============
2012-03-25 20:21
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

                                         
===========深入<----------------->浅出============
2012-03-25 20:24
快速回复:蔡勒公式是不是有问题???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026814 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved