Auyuer

导航

【算法】js实现最短时间走完不同速度的路程

题目:

现在有一条公路,起点是0公里,终点是100公里。这条公路被划分为N段,每一段有不同的限速。现在他们从A公里处开始,到B公里处结束。请帮他们计算在不超过限速的情况下,最少需要多少时间完成这段路程。

 

输入:

1、第一行为公路划分的段数N

2、接下来N行,每行三个正整数,分别是起始点,终止点(前后两段一定保证是连续的),和限速值(单位:公里/小时)

3、紧接是要计算的起始点A,和终止点B

 

输出:

1、输出为一行,即从AB需要的最少时间(单位:小时),精确到小数点后两位

 

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

posted on 2017-12-31 18:21  一只大鸡腿  阅读(453)  评论(0编辑  收藏  举报