2017-04-09 55 views
-3

我想要相同的結果,更少的執行時間。有沒有更好的方法來編寫代碼,以便在最短的執行時間內獲得相同的結果。更好的方法來寫這個程序,以便它消耗最少的時間來執行

<?php 
    $input1 = 5; 
    $input2 = 1; 
    $input3 = [9, 5, 10]; 

    $numberOfWalls = count($input3); 
    $numberOfJumps = 0; 

    for($i=0; $i<$numberOfWalls; $i++){ 
     if($input1 >= $input3[$i]){ 
      $numberOfJumps += 1; 
     }else { 
      $tot = 0; 
      while(1){ 
       if($tot + $input1 < $input3[$i]){ 
        $tot = $tot + ($input1 - $input2); 
        $numberOfJumps += 1; 
       }else{ 
        $tot = $tot + $input1; 
        $numberOfJumps += 1; 
        break; 
       } 
      } 
     } 
    } 
    echo $numberOfJumps; 
+3

如果我們重寫代碼,我們將至少必須知道它的目的了。輸入和輸出應該是什麼,它做了什麼,爲什麼。它也很高興知道爲什麼現在需要很長時間,以及您尋求什麼樣的時間縮短。大多數時候最好的建議是:購買更快的電腦。 –

+0

這個程序是在編碼比賽中給出的。在這個$ input3中是一個包含牆壁高度的數組。輸入1是猴子可以跳躍和輸入的高度2是當他不能穿過牆壁時他滑倒的高度。我寫了這個程序,我得分100/100,但執行時間是0.94秒,最好的結果是0.14秒。我很好奇,怎樣才能以最短的執行時間編寫這個程序。 –

+0

顯然,最好的方法是不循環,但是要以數學方式解決這個小難題。一次跳躍是'$ input1 - $ input2'高,所以你可以計算需要跳過多少跳才能穿過牆。 PS:我不會給你100/100的分數。你我找到解決方案的方式同樣重要。 –

回答

0

如何:

// input 
$forwards = 5; 
$backwards = 1; 
$walls  = [9, 5, 10]; 
// computation 
$oneJump = $forwards-$backwards; 
$jumps  = 0; 
foreach ($walls as $wall) $jumps += ceil(($wall-$backwards)/$oneJump); 
// output 
echo "Jumps needed = $jumps"; 
相關問題