【日期】确定母亲节

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

输入:

    年份

输出:

    日期(5月的哪一天)

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 2014↵
以文本方式显示
  1. 11↵
1秒64M0
测试用例 2以文本方式显示
  1. 2015↵
以文本方式显示
  1. 10↵
1秒64M0
测试用例 3以文本方式显示
  1. 2012↵
以文本方式显示
  1. 13↵
1秒64M0

思路:

    我们此前已经做过一个根据日期求星期的程序,其本质是使用一个while循环,从1900年1月1日(星期一)循环到输入的日期,算出经历了多少天,再对7取模并加1。

    母亲节是5月第二个星期日,其与5月1日最多差14天,所以其最迟,也不能迟于5月14日。因此我们其实可以算出5月14日是星期几:要是星期日,当天为母亲节;要是星期n(n为1到6的整数),那就往前回溯n天后是母亲节。

#include <stdio.h>

int main(){
    int year=1900,month=1,date=1,days=0,key;
    int year1;
    scanf("%d",&year1);
    while(year!=year1 || month!=5 || date!=14){
        ++days;
        switch(month)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                if (date == 31)
                {
                    date = 1;
                    if (month == 12)
                    {
                        month = 1;
                        year++;
                    }
                    else
                    {
                        month++;
                    }
                }
                else
                {
                    date++;
                }
                break;

            case 4:
            case 6:
            case 9:
            case 11:
                if (date == 30)
                {
                    date = 1;
                    month++;
                }
                else
                {
                    date++;
                }
                break;

            case 2:
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
                {
                    key = 29;
                }
                else
                {
                    key = 28;
                }
                if (date == key)
                {
                    date = 1;
                    month++;
                }
                else
                {
                    date++;
                }
                break;
        }
    }
    int week=days%7;
    if(week+1==7)
    {
        printf("14\n");
    }
    else
    {
        printf("%d\n",14-week-1);
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值