1.3 一周中的第几天

模拟题
题目描述
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:day、month 和 year,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。

class Solution {
public:
    string dayOfTheWeek(int day, int month, int year) {
        std::map<int,int> map1;
        std::map<int,int> map2;
        std::map<int,string> map3;
        int fristDay = 4;//1970年的第一天是周五
        map1[1] = 31;
        map1[2] = 28;
        map1[3] = 31;
        map1[4] = 30;
        map1[5] = 31;
        map1[6] = 30;
        map1[7] = 31;
        map1[8] = 31;
        map1[9] = 30;
        map1[10] = 31;
        map1[11] = 30;
        map1[12] = 31;
        map2[1] = 31;
        map2[2] = 29;
        map2[3] = 31;
        map2[4] = 30;
        map2[5] = 31;
        map2[6] = 30;
        map2[7] = 31;
        map2[8] = 31;
        map2[9] = 30;
        map2[10] = 31;
        map2[11] = 30;
        map2[12] = 31;
        map3[1] = "Monday";
        map3[2] = "Tuesday";
        map3[3] = "Wednesday";
        map3[4] = "Thursday";
        map3[5] = "Friday";
        map3[6] ="Saturday";
        map3[0] ="Sunday";
        for(int i=1971;i<year;i++){
            //判断是否是闰年
            if((i%4==0&&i%100!=0)||i%400==0){
                    for(int j=1;j<=12;j++)
                        for(int k=1;k<=map2[j];k++)
                         fristDay++;
            }else{
                    for(int j=1;j<=12;j++)
                        for(int k=1;k<=map1[j];k++)
                         fristDay++;
            }
        }
       
        if((year%4==0&&year%100!=0)||year%400==0){
                    for(int j=1;j<month;j++)
                        for(int k=1;k<=map2[j];k++)
                          fristDay++;
            }else{
                    for(int j=1;j<month;j++)
                        for(int k=1;k<=map1[j];k++)
                        fristDay++;
            }
            for(int i=1;i<=day;i++)
            fristDay++;
    return map3[fristDay%7];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值