• 星期几(冬季每日一题 6)


    已知 1 1 1 1 1 1 1 1 1 日是星期一。

    现在给定一个日期,请你判断是星期几。

    注意闰年 2 2 2 月有 29 29 29 天。

    满足下面条件之一的是闰年:

    年份是 4 4 4 的整数倍,而且不是 100 100 100 的整数倍;
    年份是 400 400 400 的整数倍。

    输入格式
    输入包含多组测试数据。

    每组数据占一行,包含一个整数 d 表示日,一个字符串 m 表示月,一个整数 y 表示年。

    月份 1 ∼ 12 1∼12 112,依次如下所示:

    January, February, March, April, May, June, July, August, September, October, November, December
    
    • 1

    输出格式
    每组数据输出一行结果,输出一个字符串表示给定日期是星期几。

    周一至周日依次如下所示:

    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
    
    • 1

    数据范围
    1000 ≤ y ≤ 3000 , 1000≤y≤3000, 1000y3000,
    给定日期保证合法。
    每个输入最多包含 100 100 100 组数据。

    输入样例:

    9 October 2001
    14 October 2001
    
    • 1
    • 2

    输出样例:

    Tuesday
    Sunday
    
    • 1
    • 2

    #include
    
    using namespace std;
    
    const int N = 20;
    
    string s;
    int d, m, y;
    char month[][15] = {"", "January", "February", "March", "April", "May", 
    "June", "July", "August", "September", "October", "November", "December"};
    char zd[][15] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    int get(int y, int m){
        
        int res = 0;
        res += days[m];
        if(m == 2 && (y % 4 == 0 && y % 100 != 0 || y % 400 == 0))
            res ++;
        
        return res;
    }
    
    int main(){
        
        
        while(cin >> d >> s >> y){
            
            for(int i = 1; i <= 12; i++)
                if(s == month[i]) m = i;
            
            int sum = 0;
            
            for(int i = 1; i < y; i++){
                sum += 365;
                if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0) sum++;
            }
            sum += d;
            for(int i = 1; i < m; i++) sum += get(y, i);
            sum --;
            
            cout << zd[sum % 7] << endl;    
        }
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    Java设计模式
    Android View拖拽startDragAndDrop,Kotlin
    2.4 赋值
    Linux开发工具VI/VIM
    智能医疗设备|血氧仪方案
    机器学习练习——熔池状态识别
    虹科 | 测试方案 | 汽车示波器 通讯网络(LIN/CAN/FlexRay)测试方案
    如何为 SAST 工具设置误报基准?
    【树莓派不吃灰】搭建Node-Red可拖拽图形化物联网
    JDBC编程
  • 原文地址:https://blog.csdn.net/qq_46456049/article/details/127781739