【Zeller公式计算星期几】HDU 6112 今夕何夕

acm.hdu.edu.cn/showproblem.php?pid=6112

【思路】

公式计算即可,注意特判2月29号

Zeller公式里,计算出的week不能直接模7,要保证week是正数

【AC】

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 #include<cmath>
 7
 8 using namespace std;
 9
10 bool leap(int y)
11 {
12     if(y%400==0) return true;
13     if(y%4==0&&y%100!=0) return true;
14     return false;
15 }
16 int Zeller(int y,int m,int d)
17 {
18        if(m==1||m==2)
19        {
20          y--;
21         m+=12;
22     }
23     int c=y/100;
24     y-=c*100;
25     int w=y+y/4+c/4-2*c+26*(m+1)/10+d-1;
26     while(w<0) w+=7;
27     w%=7;
28     return w;
29 }
30 int main()
31 {
32     int T;
33     scanf("%d",&T);
34     while(T--)
35     {
36         int y,m,d;
37         scanf("%d-%d-%d",&y,&m,&d);
38         int week=Zeller(y,m,d);
39         while(1)
40         {
41             y++;
42             if(m==2&&d==29)
43             {
44                 if(leap(y)&&Zeller(y,m,d)==week)
45                 {
46                     printf("%d\n",y);
47                     break;
48                 }
49             }
50             else
51             {
52                 if(Zeller(y,m,d)==week)
53                 {
54                     printf("%d\n",y);
55                     break;
56                 }
57             }
58         }
59     }
60     return 0;
61 }

Zeller

时间: 2024-10-08 05:14:42

【Zeller公式计算星期几】HDU 6112 今夕何夕的相关文章

HDU 6112 今夕何夕 (这也要写??)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6112 题目大意:给你一个合法的年月日,问下次同样是这个月日,星期一样的最早是哪年? 题目保证不超过四位数. 解题思路:讲道理真的需要吗? 过一年+365天,如果是闰年+366天,对7取余为0了就OK了.不过判断地方稍微有点麻烦,需要考虑今天是2 29,小于2 29和大于的情况,也不复杂(那我咋没写出来???) 代码: 1 int y, m, d; 2 3 bool isleap(int x){ 4

HDU 6112 今夕何夕 数论

今夕何夕 Description 今天是2017年8月6日,农历闰六月十五.小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨.为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日.下一个也是星期日的8月6日发生在2023年.小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年. Input 第一行为T,表示输入数据组数.每组数据包含一个日期,格式为YYYY-MM-DD.1 ≤

hdu 6112 今夕何夕

今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 690    Accepted Submission(s): 211 Problem Description 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近

hdu 6112 今夕何夕(模拟)

今夕何夕 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 484    Accepted Submission(s): 151 Problem Description 今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里

c语言详解  蔡勒(Zeller)公式计算某一天是星期几  极其方便

—— 蔡勒(Zeller)公式 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式.即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 公式中的符号含义如下,w:星期:c:世纪-1:y:年(两位数):m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1.2月要看作上一年的13.14月来计算,比如2003年1月1日要看作2002年的13月1日来计算):d:日:[ ]代

08--MOOC--C/C++ 根据年月日计算星期几——蔡勒公式篇

C/C++ 根据年月日计算星期几——蔡勒公式篇 蔡勒公式  蔡勒(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(前两

蔡勒公式——根据年月日计算星期几

蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几. 计算公式 由于罗马教皇搞了一些骚操作,这里给出的公式仅适用于1582年10月15日以后的星期,详情可参考 格里高利历 符号意义 w:星期: w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c:世纪(注:一般情况下,在公式中取值为已经过的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加一:不过如果年份是公元前的年份且非

Zeller公式示例

Zeller公式用于计算给定日期是星期几. 1 //根据日期计算星期几 2 3 int SDGSELFLocalTime::CalWhatDay(ST_LOCALDATE& l_stDate) 4 { 5 int year = l_stDate.m_nYear; 6 int month = l_stDate.m_nMonth; 7 int day = l_stDate.m_nDay; 8 if (month < 3) 9 { 10 year -= 1; 11 month += 12; 12

蔡勒(Zeller)公式--黑色星期五

蔡勒(Zeller)公式: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 ;y是年的后两位:c是世纪数-1(年的前两位):m是月份,大于等于3,小于等于14,某年的1.2月要看作上一年的13.14月来计算,例如2000年1月1日要按1999年13月1日来算:d是天数:[ ]代表取整: int Zeller(int Y, int m, int d) { int c,y,w; if (m < 3) { Y-=1; m+=12; } c = Y / 100; y = Y %