Last active
August 29, 2015 14:01
-
-
Save jikeytang/b609b98f94d690b212eb to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140523-题目1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电, | |
并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥? | |
PS: | |
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。 | |
```javascript | |
// you code | |
``` | |
2. 粘贴代码时请使用shift+tab,缩进前面的空白。 |
var arr = [1, 2, 5, 7],
length = arr.length,
sum = 0,
sum2 = 0;
for (var i = 1; i < length; i++) {
sum2 += arr[i];
}
sum2 += (length - 1) * arr[0];
while (arr.length > 3) {
var length = arr.length;
sum += arr[0] + arr[1] * 2 + arr[length - 1];
arr.length -= 2;
}
if (arr.length === 3) {
sum += arr[0] + arr[1] + arr[2];
} else {
sum += arr[1];
}
console.log(Math.min(sum, sum2));
抽象出来的情况好多
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
为了让程序适应各种不同的可能,我抽象了一下,一开始就只有三个人的话,必定要耗时最少的人送手电。
三个人以上,以四个为一个解决单元:两个最大值,两个最小值
由于为了不浪费时间,所以不一定能让耗时最短的人一直送手电,所以要两个最小值先过桥,过桥后:
分两种情况:
1、Min一直送手电:
耗时Max+Max2+Min
2、Min2参与送手电:
耗时Max+Min2+Min2
哪种耗时少,用哪种
数组里的两个最大值过桥后就不动,两个最小值一直参与上述计算,递归下去直到最后如果还留一个人没过桥,就让耗时最少的回去接。
有空再写程序。