zoukankan      html  css  js  c++  java
  • HDU 6112 今夕何夕 蔡勒公式

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6112题意:中文题目

    分析:关键点在与如何计算一个日期是星期几,这个可以通过蔡勒公式来计算。基姆拉尔森计算公式可以通过给定的year month day 计算出给定日期是星期几,注意:在公式中有个与其他公式不同的地方:
    把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算,最后这道题要考虑闰年的情况,2月29号只可能在闰年中出现。基姆拉尔森计算公式:  W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 在公式中d表示日期中的日数,m表示月份数,y表示年数。

    #include <bits/stdc++.h>
    using namespace std;
    int cal(int y, int m, int d)
    {
        if(m==1||m==2){
            m+=12;
            y--;
        }
        return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
    }
    bool leap(int y){
        if(y%400==0||(y%4==0&&y%100!=0)) return true;
        else return false;
    }
    int main()
    {
        int T; scanf("%d", &T);
        while(T--){
            int y,m,d;
            scanf("%d-%d-%d",&y,&m,&d);
            int w=cal(y,m,d);
            int flag=0;
            if(m==2&&d==29){
                flag=1;
            }
            if(flag){
                for(int i=y+1;; i++){
                    if(cal(i,m,d)==w&&leap(i)){
                        printf("%d
    ", i);
                        break;
                    }
                }
            }
            else{
                for(int i=y+1;;i++){
                    if(cal(i,m,d)==w){
                        printf("%d
    ",i);
                        break;
                    }
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    lombok介绍
    idea 离线安装 lombok插件
    Java中Lambda表达式的使用
    接口里的default,static方法
    Maven多环境配置实战 filter
    redis lua脚本学习
    redis的安装
    jdbc插入或查询数据库时间总是比实际时间少8小时原因
    [设计模式]单件模式
    [设计模式]命令模式
  • 原文地址:https://www.cnblogs.com/spfa/p/7375354.html
Copyright © 2011-2022 走看看