lanqiaobei13

发布时间 2023-04-09 22:26:32作者: 风起鹤归

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

输入格式
输入一行包含三个整数,a, b 和n

输出格式
输出一个整数代表天数。

#include <iostream>
using namespace std;
int main()
{
    // 请在此输入您的代码
    long i,a, b, n, week, remain,num=0;
    
    cin >> a >> b >> n;
    //题中的n在测试用例中过大直接循环会导致超时
    //将其分割为周数和所余的天数
    //用n/每周的题数得到所用的周
    week = n / (5 * a + 2 * b);
    //用n%每周的题数得到余下的题数
    remain = n % (5 * a + 2 * b);

    for (i = 1; i <= 7; i++)
    {
        //星期1-5做a题
        if (i > 5)
        {
            num = num + b;
            if (num >= remain)
            {
                break;
            }
        }
        //星期67做b题
        else
        {
            num = num + a;
            if (num >= remain)
            {
                break;
            }
        }
    }
    //判断剩余题数当为零时直接用周数*7得到天数,
    //不等于时还要加上余下的天数i
    if (remain == 0) {
        cout << week * 7;
    }
    else
        cout << week * 7 + i << endl;
    
    return 0;
}

方法一:


​ 最开始我是定义一个week对周进行约束,还有一个day对天数进行统计,当我每过一天给就判断week在1-5还是6-7范围内,根据对应的星期几进行+题数a或者b,再判断题数是否>=n,然后输出天数。

​ 缺点:改题目给的测试值有的会很大,会导致上面的方法只能完成30%的通过率。

方法二:


​ 考虑到每周的题数为a*5+b*2于是我用remain=n/(a*5+b*2)的到周数,然后week=n%(a*5+b*2)的到除去整数周的题数,最后对这个不完整的周的题数进行判断它需要写几天,最后将week*7再加回不完整的那周的天数即可