【日期】确定母亲节

母亲节是每年的五月第二个星期天,针对输入的年份,计算该年的哪一天是母亲节。

输入:

    年份

输出:

    日期(5月的哪一天)

 

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Delta(int, int, int); //计算与1900.1.1相差几天(1900.1.1是星期一)
int run4(int); //是否为闰年,是返回1,否返回0
void main()
{
    int y, m=5, d=1, delta_d, tem, ans;

    scanf("%d", &y);
    
    delta_d = Delta(y, m, d);
    tem = (delta_d % 7 + 1) % 7; //到这为止程序在计算输入的年份的5.1号是星期几
    switch (tem) //由于只有7种情况就直接switch了
    {
    case 0: ans = 8;break;
    case 1: ans = 14;break;
    case 2: ans = 13;break;
    case 3: ans = 12;break;
    case 4: ans = 11;break;
    case 5: ans = 10;break;
    case 6: ans = 9;break;
    }

    printf("%d\n", ans);

    return 0;
}

int Delta(int y, int m, int d)
{
    int ans = 0;
    register int i;

    if (y == 1900)
    {
        switch (m)
        {
        case 1: ans = d - 1;break;
        case 2: ans = 30 + d;break;
        case 3: ans = 58 + d;break;
        case 4: ans = 89 + d;break;
        case 5: ans = 119 + d;break;
        case 6: ans = 150 + d;break;
        case 7: ans = 180 + d;break;
        case 8: ans = 211 + d;break;
        case 9: ans = 242 + d;break;
        case 10: ans = 272 + d;break;
        case 11: ans = 303 + d;break;
        case 12: ans = 333 + d;break;
        }
    }
    else
    {
        for (i = 1901; i < y; i++)
        {
            if (run4(i))
                ans = ans + 366;
            else
                ans = ans + 365;
        }
        ans += 364;
        if (run4(y))
        {
            switch (m)
            {
            case 1: ans += d;break;
            case 2: ans += 31 + d;break;
            case 3: ans += 60 + d;break;
            case 4: ans += 91 + d;break;
            case 5: ans += 121 + d;break;
            case 6: ans += 152 + d;break;
            case 7: ans += 182 + d;break;
            case 8: ans += 213 + d;break;
            case 9: ans += 244 + d;break;
            case 10: ans += 274 + d;break;
            case 11: ans += 305 + d;break;
            case 12: ans += 335 + d;break;
            }
        }
        else
        {
            switch (m)
            {
            case 1: ans += d;break;
            case 2: ans += 31 + d;break;
            case 3: ans += 59 + d;break;
            case 4: ans += 90 + d;break;
            case 5: ans += 120 + d;break;
            case 6: ans += 151 + d;break;
            case 7: ans += 181 + d;break;
            case 8: ans += 212 + d;break;
            case 9: ans += 243 + d;break;
            case 10: ans += 273 + d;break;
            case 11: ans += 304 + d;break;
            case 12: ans += 334 + d;break;
            }
        }
    }

    return ans;
}

int run4(int x)
{
    if (x % 4 == 0 && x % 100 != 0 || x % 100 == 0 && x % 400 == 0)
        return 1;
    else
        return 0;
}


posted @ 2023-03-25 15:09  无情的codingbot  阅读(153)  评论(0编辑  收藏  举报