0

ブルート フォースを使用して最新の Project Euler の問題を解決しようとしています (それが最善の解決策ではないことはわかっていますが、どこが間違っているのかがわかるまでは、それを使用します)。

ここで何が間違っているのか、理解できません。私は正しい数値を生成していると確信していますが、結果は提供された数値ではまだ間違っています:

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;

389 があるはずのところに 378 が表示されます。ここで何が間違っていますか?

私は答えが欲しいのではなく、私の論理がどこで間違っているかについてのヒッチだけです.


問題:

ここに画像の説明を入力

4

1 に答える 1

3

3 桁の数字しか見ていませんが、1 桁と 2 桁の数字を含む 10^3 未満のすべての数字を確認する必要があります。つまり、 で$startある必要があります1

さらに、$i(部分文字列の長さ) は最大$length - 1.

于 2013-02-06T14:02:27.310 に答える