【2024蓝桥杯/C++/A组/艺术与篮球】

【2024蓝桥杯/C++/A组/艺术与篮球】_第1张图片

代码:

#include 
using namespace std;
int month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int val[] = {13, 1, 2, 3, 5, 4, 4, 2, 2, 2};
bool is_run(int year, int month)
{
    if (month != 2)
        return false;
    if (year % 400 == 0)
        return true;
    if (year % 100 && year % 4 == 0)
        return true;
    return false;
}
int cal(int y, int m, int d)
{
    int retv = 0;
    while (y)
    {
        retv += val[y % 10], y /= 10;
    }
    if (m < 10)
        retv += val[0];
    while (m)
    {
        retv += val[m % 10], m /= 10;
    }
    if (d < 10)
        retv += val[0];
    while (d)
    {
        retv += val[d % 10], d /= 10;
    }

    return retv;
}
int main()
{
    
    int cali = 0, bask = 0;
    for (int y = 2000, m = 1, d = 1; ; d++)
    {
        if (d > month[m] + is_run(y, m))
        {
            d = 1;
            m++;
        }

        if (m > 12)
        {
            m = 1;
            y++;
        }

        int t = cal(y, m, d);
        if (t <= 50)
            cali++;
        else
            bask++;

        if(y == 2024 && m == 4 && d == 13) break;
    }

    cout << bask;
}

注意几个点:

1.遍历条件:ABC的非,A非+B非+C非

2.YYYY-MM-DD格式,存在01-09要特殊处理

3.日期各部分不存在全零

4.为了考虑2024-4-13,需要在2024-4-14停下

你可能感兴趣的:(蓝桥杯,算法,算法,蓝桥杯)