各位,代码有问题来看我
查看原帖
各位,代码有问题来看我
383198
xwfro楼主2024/8/28 20:11

functon1(判断日期是否有效)

bool right()
{
    int year = 1000 * (s[0] - '0') + 100 * (s[1] - '0') + 10 * (s[2] - '0') + (s[3] - '0');
    int month = 10 * (s[4] - '0') + (s[5] - '0');
    int day = 10 * (s[6] - '0') + (s[7] - '0');

    if (year < 1 || year > 9999)
        return false; // 年份不在合法范围内
    if (month < 1 || month > 12)
        return false; // 月份无效

    bool isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    if (month == 2)
    {
        if (isLeapYear && day > 29)
            return false;
        if (!isLeapYear && day > 28)
            return false;
    }
    else if (month == 4 || month == 6 || month == 9 || month == 11)
    {
        if (day > 30)
            return false;
    }
    else if (day > 31)
    {
        return false;
    }
    return true;
}

判断一个数是否为质数

bool isprime(int n)
{
    if (n <= 1)
        return false; // 1 及以下的数不是质数
    if (n <= 3)
        return true; // 2 和 3 是质数
    if (n % 2 == 0 || n % 3 == 0)
        return false; // 2 和 3 的倍数不是质数
    for (int i = 5; i * i <= n; i += 6)
    {
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
    }
    return true;
}

主体函数(col是即将要访问的下标,从7开始到0访问完成,-1退出)

{
    if (col == -1)
    {
        int dayNum = day();
        int monthNum = month();
        int yearNum = year();

        if (isprime(dayNum) && isprime(monthNum) && isprime(yearNum) && right())
            ans++;
        return;
    }
    if (s[col] == '-')
    {
        for (int i = 0; i <= 9; i++)
        {
            s[col] = i + '0';
            solve(col - 1);
        }
        s[col] = '-';
    }
    else
    {
        solve(col - 1);
    }
}

注意上面的代码没有剪枝,所以能拿到70分,剩下的剪枝部分由读者个人完成

2024/8/28 20:11
加载中...