2013-02-06 149 views
0

我想用蠻力解決最新的項目歐拉問題(我知道這不是最好的解決方案,但直到我弄清楚,我錯了,我會用它)。歐拉項目:413

我不明白,我在這裏做錯了什麼。我敢肯定,我產生正確的數字,但結果仍然是錯誤的與所提供的數字:

function number_split($nb) 
{ 
    GLOBAL $arr; 
    $length = strlen($nb); 
    if($length == 1) 
     return true; 

    $count = 0; 
    for($i=1; $i<$length; $i++) { 
     for($j=0; $j<=$length-$i; $j++) { 
      $temp = substr($nb, $j, $i); 
      if($temp % $length == 0) { 
       $count++; 
       if($count > 1) 
        return false; 
      } 
     } 
    } 
    return ($count == 1); 
} 

$lim = 3; 
$res = 0; 
$start = gmp_strval(gmp_pow(10, $lim-1)); 
$end = gmp_strval(gmp_pow(10, $lim)); 
for($i=$start; $i<$end; $i++) { 
    $res += number_split($i); 
} 
echo $res; 

我得到378那裏應該是389。我在做什麼錯在這裏?

我不想要一個答案,只是在我的邏輯錯誤。


問題:

enter image description here

回答

3

你只看着3位數字,但你需要看看所有數字在10^3,其中包括1位和2 - 數字號碼。換句話說,$start應該是1

此外,由於$i(子字符串的長度)只能運行到$length - 1,所以您沒有查看整個原始字符串的子字符串。

+0

'例如,5671是一個4位數的獨生子號碼。在它的所有子串5,6,7,1,56,67,71,567,671和5671'中。這個例子清楚地表明,數字本身也被使用。 – Peon

+0

@DainisAbols:是的,數字*應該被使用,但是你的代碼不會使用它。 – interjay

+0

非常感謝,我想我已經明白了(雖然我的腳本會運行一段時間來證明它)。我在搜索3位數字時也看到錯誤的1位和2位數字;) – Peon