[蓝桥杯 2022 省 B] 刷题统计
题目描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数 a,b 和 n.
输出格式
输出一个整数代表天数。
样例 #1
样例输入 #1
10 20 99
样例输出 #1
8
提示
对于 50% 的评测用例,1≤a,b,n≤106.
对于 100% 的评测用例,1≤a,b,n≤1018.
蓝桥杯 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也是同理