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