0
点赞
收藏
分享

微信扫一扫

【15分】B. 那天是星期几(构造)

精进的医生 2022-04-16 阅读 73
c++算法

题目描述
完成如下所示的CDate类中构造函数和其它成员函数的定义,并编写程序实现按下列格式打印某个日期的功能:mm/dd/yyyy, 星期。

(提示:计算某个日期(day, month, year)为星期几的公式如下:
week = (day + 2month + 3(month+1)/5 + year + year/4 - year/100 + year/400) % 7 + 1;
其中,如果month实际为1或2,则计算时公式里month的值取13或14, 且year的值取其实际值减1的值)。

class CDate
{
public:
void print();
void getWeekofDay();
private:
int month;
int day;
int year;
int week;
};

输入
日期个数

第一个日期

第二个日期

输出
日期1月/日期1日/日期1年, 日期1星期

日期2月/日期2日/日期2年, 日期2星期

输入样例1

3
1949 10 1
2015 1 1
2011 11 11

输出样例1

10/1/1949, Saturday
1/1/2015, Thursday
11/11/2011, Friday

代码

#include <iostream>
using namespace std;

class CDate
{
private:
    int month;
    int day;
    int year;
    int week;

public:
    CDate() {};

    CDate(int y, int m, int d)
    {
        year = y;
        month = m;
        day = d;
    }

    void getWeekofDay()
    {
        if(month == 1 || month == 2)
        {
            week = (day + 2 * (month + 12) + 3* (month + 12 + 1) / 5 + 
                   (year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7 + 1;
        }
        else
        {
            week = (day + 2 * month + 3* (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7 + 1;
        }
    }

    void print()
    {
        string arr[8] = {"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
        cout << month << "/" << day << "/" << year << ", " << arr[week] << endl;
    }

};

int main()
{
    int t;
    cin >> t;
    while(t --)
    {
        int y, m, d;
        cin >> y >> m >> d;
        CDate myday(y,m,d);
        myday.getWeekofDay();
        myday.print();
    }
    return 0;
}
举报

相关推荐

0 条评论