0

私が達成する必要があるのは、

私は配列を持っています、2 3 4 5 6 7 8 9 10

配列内の数値が配列内の他の数値を完全に分割しているかどうかを確認する必要があります。(%= 0)はいの場合、番号の設定を解除します。

それは私の頭の上にあり、私はそれを機能させることができません、そして私が試したすべては私に無限ループを与え、それは私を病気にします。(笑)

私が思いつくのは、機能しないネストされたforloopだけなので、コードは含めていません:(

だからここにサンプルがあります:

入力配列:2 3 4 5 6 7 8

出力=56 7 8

アイデアの人はいますか?

アップデート:

もう少しデバッグして、自分でナットを割った。(それが将来誰かに役立つ可能性がある場合に備えて。)

// use array_unique, array_values and $size = sizeof($array)
for ($i = 0; $i < $size; $i++)
{
for ($j = $size - 1; $j > $i; $j--)
    if ($numbers[$j] % $numbers[$i] == 0)
    {
        unset($numbers[$i]);
        break;
    }
}
4

4 に答える 4

4

自分でやりたいと思っているからといって、実際のコードではこれを行いません

LoopA iterating the intput array:
  LoopB iterating the input array:
    check division of loopA value and loopB value, and add the value of loopA to a new array accordingly
  End loopB
End loopA
Print the new array

注:これは完全ではありませんが、続行する方法の開始点となるはずです。

于 2012-04-17T11:45:05.553 に答える
1

ソートされた注文番号の場合

$arr = array(2,3,4,5,6,7,8,9,10,11,12,13,14);

$half_c = ceil(count($arr)/2) - 1;
$result_array = array_slice($arr, $half_c);

編集:ランダム配列の場合、もう一度半分に切り取り、配列の最初の部分のみを繰り返すことができます。素数定理は、配列の最初の部分に対してより高速なアルゴリズムを作成するのにも役立ちます。

于 2012-04-17T11:50:24.490 に答える
0

どうですか:

$arr = range(2,20);
$size = count($arr);
for ($i=0; $i<$size; $i++) {
    for ($j=$size-1; $j>$i; $j--) {
        if ($arr[$j]%$arr[$i]) continue;
        unset($arr[$i]);
        break;
    }
}
print_r($arr);

出力:

Array
(
    [9] => 11
    [10] => 12
    [11] => 13
    [12] => 14
    [13] => 15
    [14] => 16
    [15] => 17
    [16] => 18
    [17] => 19
    [18] => 20
)
于 2012-04-17T12:36:34.247 に答える
-1

これを試して:

for($i = 0; $i < count($arr); $i++)
{
    for($j = 0; $j < count($arr); $j++)
    {
        if($arr[$i] != $arr[$j] && $arr[$i] % $arr[$j] === 0)
        {
            unset($arr[$j);
            break;
        }
    }
}
于 2012-04-17T11:44:19.220 に答える