[每周例题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再加回不完整的那周的天数即可