C 刷题统计
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。
他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。
请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数a, b 和n.
50% 的评测用例:1 ≤ a, b, n ≤ 10^6;
100% 的评测用例:1 ≤ a, b, n ≤ 10^18。
输出格式
输出一个整数代表天数。
输入样例
10 20 99
输出样例
8
思路
算出每周可以做多少题, 然后利用除运算来得出需要的周数+剩下的题数。将剩下的题数进行判断来决定是第几天。
这里学到的一个比较巧妙写法: 若 n = 12 而 a = 5 则显然需要3天, 用代码实现为:
if(n % a == 0) res += n/a;
else res += n/a + 1;
可以利用类型转换来优化为一行:
res += n/a + (n % a != 0);
同理, 对于b也是类似:
n -= 5 * a;
if(n > b) res += 5 + 2;
else res += 1;
转换为:
n-=5*a;
res += 6 + (n > b);
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
long long a, b, n;
cin >> a >> b >> n;
long long t = 5 * a + 2 * b;
long long res1 = n / t * 7;
n %= t;
if (n <= 5 * a)
res1 += n / a + (n % a != 0);
else
{
n -= a * 5;
res1 += 6 + (n > b);
}
cout << res1 << endl;
return 0;
}