题解 | #Day of Week#

Day of Week

http://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0

思路

先按年算 再按月算

Ac代码

#include<iostream>
#include<cstring>
#include<map>
using namespace std;

const int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int is_leap(int y){
    if(y%4==0 && y%100 || y%400==0)  return 1;
    return 0;
}

int get_days(int y,int m){
    if(m==2) return M[m]+is_leap(y);
    return M[m];
}

map<string,int> mp={
       {"January",1},
       {"February",2},
       {"March",3},
       {"April",4},
       {"May",5},
       {"June",6},
       {"July",7},
       {"August",8},
       {"September",9},
       {"October",10},
       {"November",11},
       {"December",12}
    };
string w[7]={"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

int main(){
    int d,y;
    string prem;
    while(cin >> d >> prem >> y){
        int m=mp[prem];
        int s=0;
        //先按照年算
        for(int i=1;i<y;i++){
            s += 365+is_leap(i);
        }
        //再按照月份来算
        for(int i=1;i<m;i++){
            s+=get_days(y,i);
        }
        s+=d;
        s=(s-1)%7;
        cout << w[s] << endl;
    }
    return 0;
}
全部评论

相关推荐

07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:11
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务