1. 程式人生 > >【十一】找出一組數組中最大值、最大值的角標、最小值、最小值的角標及平均數

【十一】找出一組數組中最大值、最大值的角標、最小值、最小值的角標及平均數

思路 原來 比較 快捷 兩個 span div 選擇排序 分數

需求:現有一組評委打分的數據。

  1. 求出他們的最大值與最小值。
  2. 最大值最小值的角標
  3. 去除最大值與最小值後的平均數

代碼:

 1 <?php
 2     $arr=array(1,2,3,4);
 3     //最小值
 4     //思路:44,5,3,333,445,99,54,332,-6
 5     // 1.定義變量,一個記錄下標$index,一個記錄最小值$minvalue
 6     // 2.假如最小值為下標為0的數
 7     // 3.拿認為最小的值與該數組內的數比較
 8     // 4.如果$minvalue大於數組內的某個數,則說明這個數不是最小值。交換下標與最小值
 9     function
minfunction($arr){ 10 $index=0; 11 $minvalue=$arr[0]; 12 for ($i=1; $i <count($arr) ; $i++) { 13 if ($minvalue>$arr[$i]) { 14 $index=$i; 15 $minvalue=$arr[$i]; 16 } 17 } 18 return $index; 19 } 20 $a
=minfunction($arr); 21 // echo $a; 22 echo "最小值為$a,他的分數為$arr[$a]"; 23 echo "<br/>"; 24 //最大值 25 // 思路:與最小值思路一樣 26 function maxfunction($arr){ 27 $index=0; 28 $minvalue=$arr[0]; 29 for ($i=1; $i <count($arr) ; $i++) { 30 if ($minvalue<$arr[$i]) { 31 $index
=$i; 32 $minvalue=$arr[$i]; 33 } 34 } 35 return $index; 36 } 37 $b=maxfunction($arr); 38 // echo $a; 39 echo "最大值為$b,他的分數為$arr[$b]"; 40 echo "<br/>"; 41 // 平均數 42 // 思路: 43 //定義一個變量記錄總分數 44 // 2.將除最大值與最小值以外的值相加 45 // 3.除以count($arr)-2就得到平均值了 46 $sum=0; 47 for ($i=0; $i <count($arr) ; $i++) { 48 // echo $a."===".$b."---".$i."<br/>"; 49 // $c=($i!=$a) && ($i!=$b); 50 // var_dump($c); 51 //註意:以下條件&&的意思兩者都為真,才執行如下語句 52 if (($i!=$a) && ($i!=$b)) { 53 $sum+=$arr[$i]; 54 // echo $sum."<br/>"; 55 } 56 } 57 echo "除去最大值與最小值的總分為$sum"."<br/>"; 58 echo "平均數為".$sum/(count($arr)-2); 59 echo "<br/>"; 60 ?>

結果:

技術分享

在做題過程中遇到的錯點:

  • 第52行值的比較,寫成了($arr[$i]!=$arr[$a]) && ($arr[$i]!=$arr[$b]),當然這樣執行結果也是對的。對下標進行比較更方便快捷
  • 第52行運算符,寫成了||。之後一直在糾結怎麽4個數他都算進去了。= =(沈默一陣)。原來是運算符用錯了。必須兩個都為真,才疊加sum的值

總結:

  1. 求最大值與最小值,使用循環遍歷排序(排序方法:冒泡排序、選擇排序、快遞排序)
  2. 運算符:&&、and(都為true) 、or ||(任一為true) 。詳情參照http://www.cnblogs.com/8013-cmf/p/7722966.html

【十一】找出一組數組中最大值、最大值的角標、最小值、最小值的角標及平均數