题解 | Day of Week

Day of Week

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

//习题2.7
#include<map>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    //概要:今天是2026年3月12日星期四,以这个为基准,算出通过输入的日期是星期几
    int year,mon,day;   //year是年,day是日,mon表示是第几个月
    char str[100];  //c风格字符串用来做输入和输出
    string month;
    int mDay[31]={0,31,28,31,30,31,30,31,31,30,31,30,31};   //mDay[1]表示1月有多少天
    string intToWeekDay[7]={"Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday", "Saturday"};

    //map从string映射到int
    map<string,int> monthToint{ //将月份对应为整数
            {"January",1},
            {"February",2},
            {"March",3},
            {"April",4},
            {"May",5},
            {"June",6},
            {"July",7},
            {"August",8},
            {"September",9},
            {"October",10},
            {"November",11},
            {"December",12}
    };

    bool isBefore;  //isBefore为真则在今天之前,为假则在今天之后
    while(scanf("%d %s %d",&day,str,&year)!=EOF){   //scanf用c风格输入
        //1.得到输入字符串月份的对应值,即是一年的第几个月
        month=str;  //将字符串从c风格转换为c++风格
        mon=monthToint[month];  //名称[键]-->得到值,如 monthToint[January]可以得到1

        //2.判断在今天之前还是之后
        if(year<2026
        || 2026==year && mon<3
        || 2026==year && 3==mon && day<12){ //今天是2026年3月12日
            isBefore=true;  //为真则在今天之前
        }else{
            isBefore=false; //为假则在今天之后
        }

        //3.根据输入的年月日是在今天之前还是之后,初始化起点和终点
        int begYear,begMon,begDay,endYear,endMon,endDay;
        if(isBefore==true){ //为真则输入的日期在今天之前
            begYear=year;
            begMon=mon;
            begDay=day;
            endYear=2026;
            endMon=3;
            endDay=12;
        }else{  //为假则输入的日期在今天之后
            begYear=2026;
            begMon=3;
            begDay=12;
            endYear=year;
            endMon=mon;
            endDay=day;
        }

        //4.从begin走到end
        int totalDay=0; //用于记录到最终end走了多少天
        while(true){
            if(begYear==endYear && begMon==endMon && begDay==endDay){   //当beg走到了end则退出
                break;
            }
            totalDay++; //每循环一次,总天数往后加一

            //nextDay操作(日期问题常规模板)
            if(begYear%400==0 || begYear%100!=0 &&begYear%4==0){    //判断这一年是否为闰年,是闰年则2月有29天
                mDay[2]=29;
            }else{
                mDay[2]=28;
            }
            begDay++;   //天数加一
            if(begDay>mDay[begMon]){  //当天数超过了该月的天数,则去往下一个月1日
                begMon++;   //月加一
                begDay=1;   //天数重置为1
                if(begMon>12){    //当月数加一之后,超过了12,说明一年走完了,要进入下一年1月
                    begYear++;  //年加一
                    begMon=1;   //月重置为1
                }
            }
        }

        //5.通过totalDay,计算是周几
        if(isBefore==true){ //输入的日期在今天之前
            //(x+totalDay)%7=4 --> x=(11-totalDay%7)%7
            int weekday=(11-totalDay%7)%7;
            printf("%s\n",intToWeekDay[weekday].c_str());
        }else{  //输入的日期在今天之后
            //得到了整数,现在需要输出的是字符串
            int weekday=(totalDay+4)%7;  //得到的是0~6之间的数,0对应周日,1对应周一...
            //weekday是int型,通过与数组intToWeekDay下标对应转为string类型是c++风格的;输出用的c风格,再转为c风格即可.c_str()
            printf("%s\n",intToWeekDay[weekday].c_str());
        }
    }
}

全部评论

相关推荐

04-10 11:02
已编辑
北方民族大学 全栈开发
“无名小卒,还是名扬天下?”我知道很多人都不觉得我能走到今天这一步,当然,也包括我自己。在我的人生里,有两部作品刻下了最深的烙印:《斗破苍穹》与《龙族》。它们总被人拿来对照:一边是萧炎的桀骜轻狂,一边是路明非的怯懦衰颓。有人说,天蚕土豆没见过魂天帝,但江南见过真凯撒。我时常觉得,自己就是那个衰小孩路明非。可路明非可以开挂,我不可以;我也无数次幻想过,能拥有萧炎那般年少轻狂的人生,可我没有他与生俱来的逆天天赋。我只是个平庸的普通人,一个看过《斗破苍穹》却开不了挂的路明非,只能一步一步往上爬。从我下定决心找实习的那一刻起,我就给自己定下了目标:“我一定要为字节跳动卖命.jpg”。萧炎有他的三年之约,我有我的两年半之约(其实是一年半)。2024.11.20,科大讯飞的第一封实习offer落进邮箱,我迈出了这场奔赴的第一步。2025.8.18,放弃百度转正的安稳机会,转身走进前路未卜的不确定里。我很感谢我在百度的mentor,是她从茫茫人海选中了我,给了我大厂实习的机会。即便有段时间我状态差、产出不理想,她依旧愿意认可我、希望我留下转正。2025.11.14,我选择走进字节跳动,以实习生的身份重新出发。2026.3.25&nbsp;-&nbsp;3.31,一周速通上海飞书,幸遇赏识我的伯乐,斩获Special&nbsp;Offer。被告知面试通过的那一刻,我的内心无比平静,就像这个offer本就该属于我。不是侥幸,是应得的。这一路,有人看轻过我的出身,不相信我能走到这里;也有人在我看不见前路的时候,替我举过灯。没有他们的鼓励与支撑,就没有今天站在这里的我。我看到了自强不息的激荡,那是一个双非的伟大乐章!我是雨夜迈巴赫,我要开启属于我的新篇章了。
在看牛客的本杰明很勇...:真心祝贺l总 我永远的偶像 我滴神
春招至今,你收到几个面试...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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