赞
踩
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
对于 50% 的评测用例, 1≤a,b,n≤10^6.
对于 100% 的评测用例, 1≤a,b,n≤10^18.
下面是本人给出的答案,经测试可以通过100%的测试用例。
- #include <iostream>
- 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开始。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。