[蓝桥杯 2022 省 B] 刷题统计
题目描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 $a$ 道题目,周六和周日每天做 $b$ 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 $n$ 题?
输入格式
输入一行包含三个整数 $a, b$ 和 $n$.
输出格式
输出一个整数代表天数。
样例 #1
样例输入 #1
10 20 99
样例输出 #1
8
提示
对于 $50 \%$ 的评测用例,$1 \leq a, b, n \leq 10^{6}$.
对于 $100 \%$ 的评测用例,$1 \leq a, b, n \leq 10^{18}$.
蓝桥杯 2022 省赛 B 组 C 题。
题解
1.先算出小明一周能做多少题
2.再算出小明做了多少周题(z=n/x),还剩多少题(z=n%x)
3.如果剩下的题能在工作日内做完,就用那几周的天数加上工作日内做完剩下题的天数,如果在周末做完的话,就先加上工作日的5天,再加上周末做完的天数。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b,n;
cin>>a>>b>>n;
long long x=5*a+2*b;
long long y=n%x;//还剩几题
long long z=n/x;//做了几周
if(y<=5*a) cout<<z*7+(y+a-1)/a;//a-1是向上取整
else cout<<z*7+5+(y-5*a+b-1)/b;
return 0;
}
注意
(y+a-1):这部分表示完成剩余题目所需的天数。首先,(y+a-1) 这部分表示剩余题目数 y 加上 a - 1,其中 a - 1 是为了向上取整。然后再除以 a,即每天能完成的题目数量,得到完成剩余题目所需的天数。
这里的 (y+a-1)/a 使用了整数除法,所以结果会向下取整。因为在实际情况中,题目数量未必能被每天的完成数量整除,所以需要考虑剩余的题目,这部分通过 (y+a-1) 来计算向上取整。
下方的b-1也是同理