zoukankan      html  css  js  c++  java
  • Day of Week 【日期】【模拟】

    Day of Week题意

    • 给你一个日期,你算出那天是星期几

      输入

      9 October 2001
      14 October 2001
      

      输出

      Tuesday
      Sunday
      

    思路

    • 模拟
    • 我是以2021年12月31号作为起点,向前or向后算日期,因为我一开始很震惊如果上机的时候不记得几号,星期几怎么办,然后就打算直接用当天来算。
    • 然后我意识到,上机有电脑!!!
    • 以2021.12.31作为起点
      • 先算到要求的年份的12月31日星期几
      • 然后算要求的月份的31号周几
      • 然后再算要求的日子
    • 向前和向后主要区别
      • 年份的日子取模的时候,往过去的年份是减去当年的日子,而往未来的年份是加上未来的日子。
    • 注意要判断闰年

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int date[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    string strm[13]={"","January", "February", "March", "April", "May", "June",
                  "July", "August", "September", "October", "November", "December"};
    string strw[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    int y, m, d;
    int yearcnt = 0;
    int my = 2021, mm = 12, md = 31, mw = 4;
    bool isLeap(int year){
        if((!(year%4)&&(year%100))||!(year%400)){
            date[2]=29;
            yearcnt = 366;
            return true;
        }
        else{
            date[2]=28;
            yearcnt = 365;
            return false;
        }
    }
    int main(){
        string str;
        while(cin>>d>>str>>y){
            for(int i=1;i<13;i++)
            {
                if(str.size()==strm[i].size() && str==strm[i]){
                    m = i;
                    break;
                }
            }
            int iy, im, id, iw=mw;
            for(iy = my; iy!=y; ){
                // 注意这里未来和过去的区别!
                if(y>iy){
                    // 要加上未来一年的日子,而不是现在这一年
                    isLeap(++iy);
                    iw = (iw+(yearcnt%7))%7;
                }
                else{
                    // 要减去这一年的日子
                    isLeap(iy);
                    iw = (iw-(yearcnt%7)+7)%7;
                    iy--;
                }
            }
            isLeap(iy);
            for(im = mm; im!=m; ){
                if(m>im){
                    iw = (iw + date[im]%7)%7;
                    im++;
                }
                else{
                    iw = (iw - date[im]%7 + 7) % 7;
                    im--;
                }
            }
            if(date[im]<d){
                iw = (iw + (d - date[im])%7)%7;
            }
            else{
                iw = (iw - (date[im] - d)%7 + 7)%7;
            }
            cout<<strw[iw]<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    document.body.clientHeight 和 document.documentElement.clientHeight 的区别
    Javascript操作div及其内含对象示例
    面向对象分析设计的经验原则
    翻页控件示例代码
    C#的6种常用集合类示例
    UML基础知识
    重温OSI和TCP/IP网络分层
    设计模式总结
    活用设计模式
    GridView当数据源为空时仍显示表头
  • 原文地址:https://www.cnblogs.com/xuwanwei/p/14648849.html
Copyright © 2011-2022 走看看