我需要完成的是,
我有一个阵列,2 3 4 5 6 7 8 9 10
我需要检查数组中的任何数字是否完美地划分了数组中的任何其他数字。 (%= 0)如果是,请取消设置数字。
它在我的头上,我无法让它工作,我尝试的一切给了我无限循环,它让我生病。 (LOL)
我没有包含任何代码,因为我能想出的是一个嵌套的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;
}
}
答案 0 :(得分: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
注意:这不完整,但它肯定会让你开始如何继续。
答案 1 :(得分: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);
编辑:对于随机数组,您可以再次削减一半,并仅迭代数组的第一部分。素数理论也有助于为数组的第一部分编写更快的算法。
答案 2 :(得分: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
)
答案 3 :(得分:-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;
}
}
}