【蓝桥杯C++练习】每日一练11-编程题

闰年分为普通闰年和世纪闰年。
普通闰年:公历年份是 4 的倍数,且不是 100 的倍数,为普通闰年。(如
2004 年就是普通闰年)。
世纪闰年:公历年份是整百数的,必须是 400 的倍数才是世纪闰年(如 1900 年不是世纪闰年,2000 年是世纪闰年)。
所以有人将此规则总结为:四年一闰,百年不闰,四百年再闰。
闰年的一年为 366 天,闰年的二月份为 29 天。平年一年为 365 天,平年的二
月为 28 天。
每年的 1、3、5、7、8、10、12 月份为 31 天,4、6、9、11 月份为 30 天。
【编程实现】
算天数。
用户输入未来的某一天,输入格式为如 2021 6 1,编程计算这一天和今天相差多少天?(例如:今天和明天是相差一天)星期几?(注意:输出格式为星期的数字值并在其前加“*”)。
【样例输入】
2021 6 1
【样例输出】
183
*2 

//【参考答案】
#include 
using namespace std;

bool isLeap(int y){
    return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
}

int main(){
    const int Y = 2021, M = 1, D = 14, W = 4; // 今日日期
    int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    days[2] = 28 + (int)isLeap(Y);
    int y, m, d;
    cin >> y >> m >> d;
    int i = Y, j = M, k = D, w = W, cnt = 0;

    while (!(i == y && j == m && k == d)){
        cnt++;
        w++;
        if (w > 7){
            w = 1;
        }
        k++;
        if (k > days[j]){
            k = 1;
            j++;
            if (j > 12){
                j = 1;
                i++;
                days[2] = 28 + (int)isLeap(i);
            }
        }
    }
    cout << cnt << endl
    << '*' << w << endl;

    return 0;
}

你可能感兴趣的:(蓝桥杯专项练习,C/C++,c++,蓝桥杯)