如何从需要与燃油汽车的阵列得到最大程度的等待时间

问题描述 投票:1回答:1

我有车$车=阵列(2,8,4,3,2),其中数组中的值显示所需的汽车燃料的数组。有三个加油站说$ X,$ y和$ž。每个燃料站的具有有限的燃料的容量。说$ X = 7,$ Y = 11,$ Z = 3。所以,当从阵列中的每个车移动到加油站时,需要检查是否有足够的燃料,以填补如果没有那么汽车必须等待,直到对方的一个做填充,然后只在下车时可以移动到燃料站。它需要填满罐的时间为每加仑1秒。因此,如何获得最大装载时间上面提到的阵列。到目前为止,我已经做到了这一点

$cars=array(2,8,4,3,2);
$x=7; $y=11; $z=3;

echo maxwaittime($cars, $x, $y, $z);

function maxwaittime($cars, $x, $y, $z){
    $car1=0;
    $car2=0;
    $car3=0;

    $maximumtime=0;
    $i=0;
    while($i < count($cars)){
        if($car1 !=0 && $car2 !=0 && $car3 !=0){
            if($car1 < $car2){
                $mintime=$car1;
            }else{
                $mintime=$car2;
            }

            if($mintime > $car3){
                $mintime=$car3;
            }

            $car1=$car1-$mintime;
            $car2=$car2-$mintime;
            $car3=$car3-$mintime;

            $x=$x-$mintime;
            $y=$y-$mintime;
            $z=$z-$mintime;

            if($mintime > $maximumtime){
                $maximumtime=$mintime;
            }
        }

        if($car1==0){
            if($cars[$i] <= $x){
                $car1=$cars[$i++];
                continue;
            }else{
                return -1;
            }
        }else if($car2==0){
           if($cars[$i] <=$y){
                $car2=$cars[$i++];
                continue;
           }else{
                return -1
           }
        }else if($car3==0){
           if($cars[$i] <=$z){
                $car3=$cars[$i++];
                continue;
           }else{
                return -1
           }
        }
    }
    return $maximumtime;
}

这里的问题是在第三辆车的重复,这需要4个加仑的燃料和燃料站仅Z有可用的车应该等待2秒,从站X获得燃料它得到自由后3加仑。但我的代码返回-1。它应该只返回-1,如果没有该站的具有期望燃料来填补。

事实上,在上面的情况下,它应该返回8,因为它是最大等待时间分别为0,0,2,2和8秒。

php algorithm
1个回答
-1
投票
            $car1=0;
            $car2=0;
            $car3=0;

            $maximumtime=0;
            $i=0;
            while($i < count($cars)){ 
     /*$car1 = 0 $car2=0 $car3 = 0 => false*/           if($car1 !=0 && $car2 !=0 && $car3 !=0){
                    if($car1 < $car2){
                        $mintime=$car1;
                    }else{
                        $mintime=$car2;
                    }

                    if($mintime > $car3){
                        $mintime=$car3;
                    }

                    $car1=$car1-$mintime;
                    $car2=$car2-$mintime;
                    $car3=$car3-$mintime;

                    $x=$x-$mintime;
                    $y=$y-$mintime;
                    $z=$z-$mintime;

                    if($mintime > $maximumtime){
                        $maximumtime=$mintime;
                    }
                }
                if($car1==0){
            if($cars[$i] <= $x){
                $car1=$cars[$i++];
                continue;
            }else{
                return -1;
            }
        }else if($car2==0){
           if($cars[$i] <=$y){
                $car2=$cars[$i++];
                continue;
           }else{
                return -1;
           }
/*/*$car3=0 => true*/*/
        }else if($car3==0){
/*$i=2 => $cars[2]= 4 $z = 3 => FALSE => return  -1*/
           if($cars[$i] <=$z){
                $car3=$cars[$i++];
                continue;
           }else{
                return -1;
           }
        }
    }
    return $maximumtime;
}
© www.soinside.com 2019 - 2024. All rights reserved.