Calandar(第十届山东省ACM程序设计竞赛A题)

zoj4113

Sample Input
4
2019 5 12 Monday
2019 5 14
2019 5 12 Tuesday
2019 12 30
2019 5 12 Friday
1000000000 1 1
1000000000 1 1 Wednesday
2019 5 12
Sample Output
Wednesday
Friday
Thursday
Thursday

题意:规定一年12个月,一月30天,一周5天,给出一天是星期几,求给出的另一天是星期几。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std;
typedef long long ll;
char ss[10][20]={"Monday","Tuesday","Wednesday","Thursday","Friday"};
int main()
{
    ll T,n,k;
    cin>>T;
    while(T--){
        ll now,t1,t2,t,y1,y2,m1,m2,d1,d2,flag=0;
        char s[20];
        memset(s,0,sizeof(s));
        scanf("%lld%lld%lld %s",&y1,&m1,&d1,s);
        scanf("%lld%lld%lld",&y2,&m2,&d2);
        if(y1>y2||(y1==y2&&m1>m2)||(y1==y2&&m1==m2&&d1>d2)){
            swap(y1,y2);
            swap(m1,m2);
            swap(d1,d2);
            flag=1;
        }
        if(y1==y2){
            if(m1!=m2)
                t=(30-d1)+d2+(m2-m1)*30;
            else
                t=d2-d1;
        }
        else{
            t1=30-d1+(12-m1)*30;
            t2=(m2-1)*30+d2;
            t=t1+t2+(y2-y1-1)*12*30;
        }
        for(int i=0;i<=4;i++){
            if(strcmp(ss[i],s)==0){
                now=i;
                break;
            }
        }
        t=t%5;
        if(flag==0)
            t=(t+now)%5;
        else
            t=(now-t+5)%5;
        printf("%s\n",ss[t]);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值