【算法】js实现最短时间走完不同速度的路程
题目:
现在有一条公路,起点是0公里,终点是100公里。这条公路被划分为N段,每一段有不同的限速。现在他们从A公里处开始,到B公里处结束。请帮他们计算在不超过限速的情况下,最少需要多少时间完成这段路程。
输入:
1、第一行为公路划分的段数N
2、接下来N行,每行三个正整数,分别是起始点,终止点(前后两段一定保证是连续的),和限速值(单位:公里/小时)
3、紧接是要计算的起始点A,和终止点B
输出:
1、输出为一行,即从A到B需要的最少时间(单位:小时),精确到小数点后两位
Sample Input:
6
0 10 10
10 30 20
30 40 20
40 60 5
60 80 5
80 100 5
0 20
Sample Output:
1.50
Sample Input:
4
0 30 20
30 40 10
40 80 30
80 100 10
0 100
Sample Output:
5.83
代码如下:
var n = 6; // 读取输入的行数 var arr = [ [0, 10, 10], [10, 30, 20], [30, 40, 20], [40, 60, 5], [60, 80, 5], [80, 100, 5] ]; //所有的距离分段和对应的速度 var temp = [0, 20]; //起始位置 var time = 0; //所要计算的时间 var index = 0; //临时变量 var num = 0; //临时变量 var k; for(var i = 0; i < n; i++) { //遍历数组 if(temp[0] >= arr[i][0] && temp[0] <= arr[i][1]) { //找起点所在的分段,计算起始段内需要的时间 index = i; time += (arr[i][1] - temp[0]) / arr[i][2]; } //找终点所在的分段 , 计算终止段内需要的时间 if(temp[1] >= arr[i][0] && temp[1] <= arr[i][1] && (temp[1] != arr[i][0])) { num = i; time += (temp[1]- arr[i][0]) / arr[i][2]; } } //计算起止位置之间的所有时间,并累加 k = index + 1; while(k < num) { time += (arr[k][1] - arr[k][0]) / arr[k][2]; k++; } //保留了两位小数 console.log(time.toFixed(2));
CSDN博客地址:http://my.csdn.net/Auyuer