第3关:这天星期几?

第3关:这天星期几?

300

  • 任务要求
  • 参考答案
  • 评论

任务描述

本关任务:编写函数 whatDay,计算某年某月的1号是星期几并返回。

相关知识

要知道某一天是星期几,可以用已知的某一天进行推导。

例如已知公元1年1月1日是星期一,公元2年1月1日则是在星期一基础上加上一整年的天数(要考虑闰年,闰年一年366天,非闰年365天),如果不是1月,例如7月,则要加上1到6月的所有天数,这里也要考虑闰年,因为闰年的二月是29天,非闰年是28天。

这样就可以算出从公元1年1月1日到该年月过了多少天,而过了7天星期不变,所以可以用这种方法推导出公元元年之后的任何一天是星期几。

下面的程序可以计算星期一过了 n 天后是星期几:

 
  1. w = 1; // 从星期一开始
  2. w = w + n; // n天后
  3. w = w % 7; // 得到0-6,其中0为星期天
  4. // 调整星期天
  5. if(w == 0) w = 7;
编程要求

在右侧编辑器中的Begin-End之间补充代码,计算输入数据年月份的1号是星期几并返回(周一到周日分别返回整数1到7)。

其中该函数的参数为输入的两个整数数据:年和月。

提示:由于判断是否闰年有多个地方需要用到,故已把该功能单独实现为一个函数。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:2016 1 预期输出:2016年1月1日是星期5

测试输入:2017 7 预期输出:2017年7月1日是星期6

#include <iostream>

using namespace std;

// 函数leapYear

int leapYear(int y)

{

    if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)

        return 1;

    return 0;

}

// 函数whatDay:计算某年某月某日是星期几

// 参数:year-年,month-月

// 返回值:--7分别表示星期一到星期日

int whatDay(int year, int month)

{

    // 请在这里补充代码,实现函数whatDay

    /********** Begin *********/

     int a,sum=0;

    int b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

    //计算从公元1月1日到现在有多少天

    for(int j=1;j<year;j++)

    {

        for(int i=0;i<=12;i++)

        {sum=sum+b[i];}

        if(leapYear(j)==1)

        {sum=sum+1;}  //闰年+1

    }

    for(int i=0;i<month;i++){

        sum=sum+b[i];}

    if(month>2&&leapYear(year)==1){

        sum=sum+1;}

    a=(sum+1)%7;

    return a;

    /********** End **********/

}

int main()

{

    int y, m, xq;     // 年、月、星期几

    cin >> y >> m;     // 输入年月

    xq = whatDay(y,m);     // 计算星期几

    cout << y << "年" << m << "月1日是星期";     // 输出星期

    if(xq == 7)

        cout << "日" << endl;

    else

        cout << xq << endl;

    return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值