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;
    }
  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/pach/p/7193383.html
Copyright © 2011-2022 走看看