0

我需要完成的是,

我有一个数组,2 3 4 5 6 7 8 9 10

我需要检查数组中的任何数字是否完美地除以数组中的任何其他数字。(%=0) 如果是,请取消设置数字。

它在我头上,我无法让它工作,我尝试的一切都给了我无限循环,它让我生病了。(哈哈)

我没有包含任何代码,因为我能想到的只是一个不起作用的嵌套 forloop :(

所以这是一个示例:

输入数组:2 3 4 5 6 7 8

输出 = 5 6 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 回答