2012-08-02 34 views
1

爲了簡化這個問題,我正在尋找PHP來建議從數組最接近的三角數字到返回false的數字。建議從數組中最接近的匹配'正確'的數字,如果,如果語句返回false

例如,如果原始數字的值是54(這不是三角形),我想讓php從數組中選擇最接近的兩個變量:55等等是45.然後echo他們作爲建議。 我該如何做到這一點?

給一些背景資料,這裏是我當前的代碼:

<?php 
$x = 54; 
$area = $x * 8; 
$ans1 = sqrt(1 + $area) -1; 
$ans2 = sqrt(1 + $area) +1; 

$answer1 = $ans1/2; 
$answer2 = -$ans2/2; 
$answer3 = $answer1 + $answer2; 

    if (is_numeric($answer2) && strpos($answer2, '.') === false){ 
     echo "$x is Triangular <br /> <br />"; 
      if ($answer2 > $answer1) {echo "Total number of glasses per side: ".$answer2."<br />";} 
      if ($answer2 < $answer1) {echo "Total number of glasses per side: ".$answer1."<br />";} 
      } 
    else { 
     echo "$x is not Triangular <br /> <br />";} 
?> 
+1

我在這裏看不到一個數組... – 2012-08-02 17:26:07

+0

沒有一個數組的是,這是我現在的碼。 – MChandler 2012-08-02 17:42:02

+0

您的問題標題指出您想從數組中讀取建議,但沒有一個。是關於如何生成所述數組的問題?請澄清你的問題。\ – 2012-08-02 17:44:46

回答

0

一個天真的方法是計算差值每個數字數組中,然後從中挑選具有最小差異的指標。

一個更好的方法是使用三角形數列((n²+ n)/ 2 = t)序列的公式。 求解n和你:

n = 0.5 (±sqrt(8t+1)-1) 

然後就可以計算出n,繞着它(向上或向下),並把它代入公式的序列。 Voilà,你有你最接近的三角數字。

例如

$input = 54; 
$n = round(0.5*(sqrt(8*$input+1)-1)); 
$t = $n*($n+1)/2; 

echo $t; // 55 

挑兩個周圍值,floorceil,分別爲:

$input = 54; 
$n1 = floor(0.5*(sqrt(8*$input+1)-1)); 
$n2 = ceil(0.5*(sqrt(8*$input+1)-1)); 
echo $n1*($n1+1)/2; // 45 
echo $n2*($n2+1)/2; // 55 
+0

完美,謝謝! – MChandler 2012-08-02 19:00:15