c++经典好题
题目描述 (Description)
小羊的妈妈给他制定了一个口算打卡计划,一共要完成x道口算题,小羊又给自己额外增加了y道口算题。小禾每天最多能完成k道题目,请问小羊最快打卡多少天可以完成?(周末不打卡,要放松哦~)
输入格式(Format Input)
输入三个整数x,y,k。(1≤x,y≤1e10,1≤k≤500)输出格式(Format Output)
输出打卡天数。样例(Sample)
输入样例1 (Sample Input 1) 复制
18 7 4输出样例1 (Sample Output 1)
9
#include <bits/stdc++.h>
using namespace std;int main(){int x, y, k;cin >> x >>y >> k;//int day=ceil(1.0*(x+y)/k);int day=(x+y+k-1)/k;day=day+((day-1)/5)*2;cout << day; return 0;
}
(total + k - 1) / k
通过调整分子使整数除法自动实现向上取整。具体原理如下:
整数除法的向下取整特性:默认情况下,
total / k
会丢弃小数部分(如7 / 3 = 2
)。余数处理:若
total
无法被k
整除,余数r = total % k
满足1 ≤ r ≤ k-1
,此时需要额外加1
天。分子调整:通过将分子改为
total + k - 1
,相当于将余数r
补足到k
,触发整数除法的进位。让余数部分“凑满”
2.
D-1
的调整作用通过
(D - 1) // 5
:
当
D=5
→(5-1)//5 = 0
,不添加周末,结果正确。当
D=6
→(6-1)//5 = 1
,添加2
天周末(前5天占满一周),结果正确。通用规律:每满
5
个工作日(如5, 10, 15...
),(D-1)//5
的值递增,确保周末仅在实际跨越完整周后添加。