zoukankan      html  css  js  c++  java
  • Gym 101206L Daylight Saving Time 根据年月日计算星期

    题意:

    [3月的第二个周日02:00:00 , 3月的第二个周日03:00:00) 这个区间都不是PST或PDT,[11月的第一个周日01:00:00 , 11月的第一个周日02:00:00) 这个区间既是PST又是PDT,中间的是PDT,两边的是PST。

    分析:

    计算星期几可以直接用公式进行计算

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

    计算3月的第二个周日为哪一天:day=15-ReturnWeekDay(year,3,1)

    计算11月的第一个周日为哪一天:day=8-ReturnWeekDay(year,11,1)

    这个公式可以自行推导

    #include <bits/stdc++.h>
    using namespace std;
    
    char s[50];
    
    struct Time
    {
        int mth,day;
        int hor,mnt,scd;
        Time() {};
        Time(int m,int d,int h,int mi,int s)
        {
            mth=m,day=d;
            hor=h,mnt=mi,scd=s;
        }
    } ti;
    
    int ReturnWeekDay( unsigned int iYear, unsigned int iMonth, unsigned int iDay )
    {   //http://blog.csdn.net/areskris/article/details/8661983
        int iWeek=0;
        unsigned int y=0, c=0, m=0, d=0;
        if(iMonth==1 || iMonth==2 )
        {
            c=( iYear-1)/ 100;
            y=( iYear-1)% 100;
            m=iMonth+12;
            d=iDay;
        }
        else
        {
            c=iYear/100;
            y=iYear%100;
            m=iMonth;
            d=iDay;
        }
        iWeek=y+y/4+c/4-2*c+26*(m+1)/10+d-1;            //蔡勒公式
        iWeek=iWeek >= 0 ?(iWeek % 7):(iWeek%7+7);      //iWeek为负时取模
        if(iWeek==0) iWeek=7;                           //星期日不作为一周的第一天
        return iWeek;
    }
    
    int circle(int k)
    {
        int res=0;
        for(int i=k; i<k+2; i++)
        {
            res*=10;
            res+=s[i]-'0';
        }
        return res;
    }
    
    void transf()
    {
        ti.mth=circle(5);
        ti.day=circle(8);
        ti.hor=circle(11);
        ti.mnt=circle(14);
        ti.scd=circle(17);
    }
    
    bool cmp(Time a,Time b)
    {
        if(a.mth==b.mth)
        {
            if(a.day==b.day)
            {
                if(a.hor==b.hor)
                {
                    if(a.mnt==b.mnt)
                    {
                        return a.scd<b.scd? false:true;
                    }
                    return a.mnt<b.mnt? false:true;
                }
                return a.hor<b.hor? false:true;
            }
            return a.day<b.day? false:true;
        }
        return a.mth<b.mth? false:true;
    }
    
    int main()
    {
    //    freopen("in.txt","r",stdin);
        int t,kase=0;
        scanf("%d",&t);
        getchar();
        while(t--)
        {
            gets(s);
            transf();
            int year=0;
            for(int i=0; i<4; i++)
            {
                year*=10;
                year+=s[i]-'0';
            }
            int day=15-ReturnWeekDay(year,3,1);
            Time pst1=Time(3,day,2,0,0);
            Time pdt1=Time(3,day,3,0,0);
            day=8-ReturnWeekDay(year,11,1);
            Time pdt2=Time(11,day,1,0,0);
            Time pst2=Time(11,day,2,0,0);
            printf("Case #%d: ",++kase);
            if(!cmp(ti,pst1) || cmp(ti,pst2))
                puts("PST");
            else if(cmp(ti,pst1) && !cmp(ti,pdt1))
                puts("Neither");
            else if(cmp(ti,pdt1) && !cmp(ti,pdt2))
                puts("PDT");
            else puts("Both");
        }
        return 0;
    }
  • 相关阅读:
    Java的三种代理模式
    关于C# 中的Attribute 特性
    jvm虚拟机原理1
    Java和C#中的接口对比(有你不知道的东西)
    c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
    Java运行时,各种类型存储介绍
    Java中的内存处理机制和final、static、final static总结
    Debug目录、Release目录,bin目录、obj目录,vshost.exe.config文件、.exe.config文件分析【C#】
    C#有关的vshost、exe、config格式说明
    C#中的程序集和命名空间
  • 原文地址:https://www.cnblogs.com/pach/p/7193383.html
Copyright © 2011-2022 走看看