蓝桥杯刷题统计

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?

对于 50% 的评测用例, 1≤a,b,n≤10^6.

对于 100% 的评测用例, 1≤a,b,n≤10^18.

下面是本人给出的答案,经测试可以通过100%的测试用例。

#include 
using namespace std;

int main()
{
    long long a, b, n;
    cin >> a >> b >> n;
    if (n / (5 * a + 2 * b) <= 1) //完成时间小于一周
    {
        for (int i = 1; i < 8; i++)
        {
            if ((i*a >= n)&&i<=5)
            {
                cout << i << endl;
                goto mark;
            }
            while (i > 5)
            {
                if (5 * a + (i - 5)*b >= n)
                {
                    cout << i << endl;
                    goto mark;
                }
                i++;
            }
        }
    }
    else  //完成时间大于一周
    {
        long long cnt=0,num=0;
        cnt = n / (5 * a + 2 * b);  //计算有几个完整的七天
        num = n - (5 * a + 2 * b)*cnt;  //剩下的任务量,在一周内完成,可参考上述代码。
        for (int i = 0; i < 8; i++)  //从0开始,要考虑到可能是一周的整数倍
        {
            if ((i*a >= num) && i <= 5)
            {
                cout << 7*cnt+i << endl;
                goto mark;
            }
            while (i > 5)
            {
                if (5 * a + (i - 5)*b >= num)
                {
                    cout << 7*cnt+i << endl;
                    goto mark;
                }
                i++;
            }
        }
    }
    mark:
    return 0;
}

需要注意的是,应该考虑到存在答案是一周的整数倍的情况,所以else里面的for循环i应该从0开始,而不是和上面一样从1开始。

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