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;
}