1. 题意
典型的空瓶换酒问题。
2. 题解
2.1 直接模拟
class Solution {
public:
int distanceTraveled(int mainTank, int additionalTank) {
int ans = 0;
while (mainTank >= 5) {
ans += mainTank/5*5;
int extra = min(mainTank/5, additionalTank);
mainTank %= 5;
mainTank += extra;
additionalTank -= extra;
}
ans += mainTank;
return ans * 10;
}
};
2.2 数学
计算主油箱理论加油次数
每五公里就可以加一次油,所以相当于 4 4 4公里对应加一次油。
但是 4 4 4公里的整数倍少加一次油,因为最后剩余的 4 4 4公里并不足以加一次油。
add_cnt = (mainTank - 1)/4
我们还需要副油箱里有对应次数的油。
所以加油次数
add_cnt = min( ( mainTank - 1)/4, additionalTank)
总的油数
tot = mainTank + min( (mainTank - 1)/4, additionalTank );
最终答案乘上里程数即可
class Solution {
public:
int distanceTraveled(int mainTank, int additionalTank) {
int add_cnt = min((mainTank - 1) / 4, additionalTank);
int ans = mainTank + add_cnt;
return ans * 10;
}
};