我有一个汽车数组$ cars = array(2,8,4,3,2),其中数组中的值显示汽车所需的燃料。并且有三个加油站,分别是$ x,$ y和$ z。每个加油站的燃油容量有限。假设$ 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只有3加仑的可用空间,汽车需要等待2秒并在获得自由后从x站获得燃料。但是我的代码返回-1。如果没有加油站需要加油,它应该只返回-1。
实际上,在上述情况下,它应该返回8,因为它是最大等待时间,分别为0、0、2、2和8秒。
答案 0 :(得分:-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;
}