2016-05-14 104 views
0

代碼計算至少3的最小和最大數目從陣列

<?php 

    $array = array("1", "2", "3", "4", "5", "6", "7", "8", "100"); 
    $max = $temp = 0; 
    $min = $temp = 0; 

    //This loop is to get max and min value from array 
    for ($i = 0 ; $i < count($array); $i++) { 

     if ($i == 0) { 
      $max = $temp = $array[$i]; 
     } 

     if ($i > 0) { 
      if ($array[$i] > $temp) { 
       $max = $array[$i]; 
      } 
     } 

     if ($i == 0) { 
      $min = $temp = $array[$i]; 
     } 

     if ($i < 0) { 
      if ($array[$i] < $temp) { 
       $min = $array[$i]; 
      } 
     } 

    } 

    echo "Max Number = $max <br>"; 
    echo "Min Number = $min"; 


?> 

上面的代碼只計算一個最小和從所述陣列的一個最大數目。我需要它來計算3個最大值和3個最小值。

我不能使用預製功能,不能使用多個for循環,所以請在上面的代碼中建議我自定義。

+1

你是什麼意思,「3最大數量」?你只是指3個最大的數字? – Rizier123

+1

什麼是「預製」功能?這是一個學校項目嗎? – billynoah

回答

1

這看起來很整齊。

<?php 

$array = array("1", "2", "3", "4", "5", "6", "7", "8", "100"); 

$n1 = $n2 = $n3 = 1000 ; // some high number 
$m1 = $m2 = $m3 = 0 ; 

//This loop is to get max and min value from array 
for ($i = 0 ; $i < count($array); $i++) { 
    $x = $array[$i] ; 
    //min   
    if ($x <= $n1){ 
     $n3 = $n2 ; 
     $n2 = $n1 ;    
     $n1 = $x ; 
    } elseif ($x < $n2){ 
     $n3 = $n2; 
     $n2 = $x; 
    } elseif ($x < $n3){ 
     $n3 = $x; 
    } 

    //max 
    if ($x >= $m1){ 
     $m3 = $m2 ; 
     $m2 = $m1 ;    
     $m1 = $x ; 
    } elseif ($x > $m2){ 
     $m3 = $m2; 
     $m2 = $x; 
    } elseif ($x > $m3){ 
     $m3 = $x; 
    }   

} 

echo "Min Number = $n1 $n2 $n3<br>"; 
echo "Max Number = $m1 $m2 $m3"; 


?> 

輸出:

Min Number = 1 2 3 
Max Number = 100 8 7 
+0

這是真棒,但一個小問題計數功能是預先製作的,因爲我前面提到我不能使用計數預製功能。有沒有其他的方法來計算哪個不是預製的? – TheNoobster

+0

使用foreach($ k => $ v){..} $ k是key $ v是value – shikhar

-1

您只需對數組進行反向排序,然後對前三個索引進行切片。你可以表達它作爲一個功能:

function topThree(Array $arr) { 
    // Sort the array in reverse 
    rsort($arr); 
    // Return the first three indexes (top three) 
    return array_slice($arr, 2); 
} 

rsortarray_slice

編輯:好吧,這工作

/** 
* Sorts an array of numeric values from largest to 
* smallest and returns the three highest values. 
* 
* @param Array $arr An array of numeric values. 
* @return Array $srt The three highest values in $arr. 
*/ 
    function topThree(Array $arr) { 
    $srt = []; 
    foreach($arr as $key => $val) { 
     if(!$key) { 
      $srt[] = $val; 
     } else if ($val < $srt[0]) { 
      array_unshift($srt, $val); 
     } else if ($val > $srt[count($srt)-1]) { 
      array_push($srt, $val); 
     } else { 
      for($i=1; $i<count($srt); $i++) { 
       if($val < $srt[$i]) { 
        array_splice($srt, $i, 0, $val); 
        break; 
       } 
      } 
     } 
    } 
    $max = array_slice($srt, -3, 3); 
    $min = array_slice($srt, 0, 3); 

    return ["min" => $min, "max" => $max]; 
    } 


// "Test" 
for($i=0; $i<20;$i++){ 
    $arr[]=rand(-100,100); 
} 

print_r($arr); 
print_r(topThree($arr)); 

如果$val的第一$key$val的加入$sort

如果$val小於$sort[0]$val被添加到$sort的開頭。

如果$val的大於$sort[length],則將$val添加到$sort的末尾。

否則,我們檢查每$val對其他$sort值。當我們發現$sort[$i]的值大於$val時,我們用$val$i拼接陣列。

有意義嗎?

+0

不能使用rsort asort等預定義函數, – TheNoobster

+0

修正了它。當然,你可以使用array_slice,push等。 – TeamRad

+0

如果你甚至不能使用array_splice,push,不改變我給你的東西,如果你從原始數組中取消匹配的0,min,max值,對剩下的(排序的中間)值使用一些遞歸。 – TeamRad

0

可以使用if語句

檢查最大/最小數量,當你發現比以前的一個,而其他循環另一個最小值/最大值工作處理這個問題。這是您使用

讓我們假設算法,你分鐘= 5 和循環當前索引值是3,那麼你將不得不作出min=3

約例如分配5到min2後什麼?

三個變量MIN1,MIN2,MIN3和嵌套if語句

我知道這是不是最好的方式。但你有沒有試過這個?

+0

我想我忘了提及,數組持有數字將是隨機的,所以我不能讓程序限於已定義的數字,而是應該基於陣列上的任何數字計算,並應打印3最大和3分鐘的數字。 – TheNoobster

+0

我覺得你沒有得到我......我並不是想要定義const數字......這些數字只是個例子..我的意思是以相同的方式工作,但爲'min'增加兩個變量,而兩個更多變量爲'max',所以當你改變'max'的數值時,你把prev。在'max2'中的值例如爲 –

+0

'<?php $ array = array(「1」,「2」,「3」,「4」,「5」,「6」,「7」,「8」 ,「100」); $ max1 = $ max2 = $ max3 = $ temp = 0; ($ i = 0; $ i $ max1) \t { \t \t $ max3 = $ max2; \t \t $ max2 = $ max1; \t \t $ max1 = $ x; \t} \t否則如果($ X> $ MAX2) \t { \t \t $ MAX3 = $ MAX2; \t \t $ max2 = $ x; \t} \t否則如果($ X> $ MAX3) \t \t { \t \t \t $ \t MAX3 = $ X; \t} \t } echo「Max Number = $ max1,$ max2,$ max3
」; 「這是一個例子,爲我的意思得到最大3個數字 –

0

此代碼工作正常

<?php 

    $array = array("1", "2", "3", "4", "5", "6", "7", "8", "100"); 

    $max1 =$max2 =$max3= -999999999999999; // highest possible number 
    $min3 = $min2= $min1 = 9999999999999999; // lowest possible number 

    for ($i = 0 ; $i < count($array); $i++) { 
     $x = $array[$i] ; 

     //to get the max 3 numbers 
     if($x>= $max1) 
     { 
      $max3 = $max2; 
      $max2 = $max1; 
      $max1 = $x; 
     } 
     else if ($x> $max2) 
     { 
      $max3 = $max2; 
      $max2 = $x; 
     } 
     else if ($x> $max3) 
     { 

      $max3 = $x; 
     } 
     // to get the min 3 numbers 
     if($x<=$min3 && $x>$min2) 
     { 
      $min3 = $x; 

     } 
     else if ($x<$min2 && $x>$min1) 
     { 
      $min3 = $min2; 
      $min2 = $x; 
     } 
     else if ($x<$min1) 
     { 
      $min3 = $min2; 
      $min2 = $min1; 
      $min1 = $x; 
     } 


    } 

    echo "Max Number = $max1 , $max2 , $max3 <br>"; 
    echo "Min Number = $min1 , $min2 , $min3"; 


?> 

輸出是

Max Number = 100 , 8 , 7 
Min Number = 1 , 2 , 3 

有更好的方法,比更有效,但需要2個循環,你不'不要那樣!

相關問題