zoukankan      html  css  js  c++  java
  • 【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
    ",y);
    47                     break;
    48                 }
    49             }
    50             else
    51             {
    52                 if(Zeller(y,m,d)==week)
    53                 {
    54                     printf("%d
    ",y);
    55                     break;
    56                 }
    57             }
    58         }
    59     }
    60     return 0;
    61 }
    Zeller
  • 相关阅读:
    算法演示工具
    1198:逆波兰表达式
    1315:【例4.5】集合的划分
    1192:放苹果
    1191:流感传染
    1354括弧匹配检验
    1331【例1-2】后缀表达式的值
    1307高精度乘法
    1162字符串逆序
    1161转进制
  • 原文地址:https://www.cnblogs.com/itcsl/p/7354295.html
Copyright © 2011-2022 走看看