一、题目描述
一农夫带着m只羊,n只狼过河,农夫有一条可载x只狼/羊的船;农夫在时或者羊的数量大于狼时,狼不会攻击羊;
农夫在不损失羊的情况下,运输几次可以完成运输?
返程不计入次数。
二、输入描述
输入参数为 m, n , x;
m 为羊的数量、n为狼的数量、x为可载狼和羊的数量。
三、输出描述
返回运输次数即可。
如果无法完成运输返回0。
四、解题思路
- 可载狼和羊的数量 > 羊的数量;
- 运输次数+1;
- 狼的数量 > 狼的数量 且 狼的数量 < 2 * (x - 1);
- 需要第二次运输+1;
- 可载狼和羊的数量 < 羊的数量,需要多次运输;
- 狼的数量减去x-1,羊的数量减去x;
- 输出运输次数counts;
五、JavaScript算法源码
function calculate(m, n, x) {
let counts = 1; // 初始过河的一次
if (x >= m) { // 可载狼和羊的数量大于羊的数量,可以一次过河完成
counts++;
} else if (n > m && n < 2 * (x - 1)) { // 一次过河无法同时运输所有的狼和羊,需要第二次过河
counts += 2;
} else { // 一次过河无法同时运输所有的狼和羊,需要多次运输
while (m > 0) {
m -= x;
n -= x - 1;
counts++;
}
}
return counts;
}
六、效果展示
1、输入
5 3 3
2、输出
3
3、说明
第一次:2只狼
第二次:三只羊
第三次:2只羊,1只狼
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。