zoukankan      html  css  js  c++  java
  • HDU 6112

    题意

    给出一个年月日, 求接下来最近哪一年的该月改日和这一天的星期相同

    思路

    基姆拉尔森公式求星期即可, 特别注意2月29日的特判 !
    关于基姆拉尔森公式 :

    基姆拉尔森公式模板

    int weekday(int y, int m, int d)
    {
        if(m==1||m==2){
            m+=12;
            y--;
        }
        int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
        return week;
    }
    

    基姆拉尔森计算公式
    W= (d+ 2*m + 3 * (m+1)/5+y+y/4-y/100+y/400) mod 7
    在公式中d表示日期中的日数,m表示月份数,y表示年数。

    注意:在公式中有个与其他公式不同的地方:
    把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

    细说基姆拉尔森日期公式
    根据日期判断星期几(使用基姆拉尔森计算公式)

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    
    using namespace std;
    
    bool isleapyear( int y ){
        if( y % 400 == 0 || ( y % 4 == 0 && y % 100 != 0 ) )
            return true;
        return false;
    }
    
    int weekday(int y, int m, int d)
    {
        if(m==1||m==2){
            m+=12;
            y--;
        }
        int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
        return week;
    }
    
    int main()
    {
        int y, m, d;
        int T;
        scanf("%d
    ",&T);
        while(T--){
            scanf("%d-%d-%d", &y, &m, &d);
            int now = weekday(y,m,d);
            int yy;
            if( m == 2 && d == 29 ){
                for( int i = y+1; ; i++ ){
                    if( isleapyear(i) ){
                        if( weekday(i, m, d) == now ){
                            yy = i;
                            break;
                        }
                    }
                }
            }
            else{
                for( int i = y+1; ; i++ ){
                    if( weekday(i, m, d) == now ){
                        yy = i;
                        break;
                    }
                }
            }
            printf("%d
    ",yy);
        }
        return 0;
    }
  • 相关阅读:
    锁,你知多少呢?
    成长于我
    js write google广告
    项目三边六拍
    IT新人培养计划
    网站变灰色 代码
    职业人生
    ASP.NET 4 新特性之一二
    .net 例子
    A Better sp_who2 using DMVs (sp_who3)
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740549.html
Copyright © 2011-2022 走看看