我有一个数字,其中n个数字从-10到10(不含0)。实现从总和给出0的数组中返回对的数量的函数。
例如:
$ input = array( 3 ,6, -3 ,5, -10 ,3, 10 , 1 , 7 , -1 , - 9,-8, 7 ,7, -7 , - 2, -7 );
正确的答案是5(成对加粗)
我做了这样的事情,但它给了我10对:
$length = count($input) - 1;
$count = 0;
for ($i = 0; $i <= $length; $i++) {
for ($j = $i + 1; $j <= $length; $j++) {
if ($input[$i] + $input[$j] == 0) {
$count++;
}
}
}
echo $count;
答案 0 :(得分:3)
<?php
$input = array (3, 6, -3, 5, -10, 3, 10, 1, 7, -1, -9, -8, 7, 7, -7, -2, -7);
$length = count($input) - 1;
$count = 0;
for ($i = 0; $i <= $length; $i++){
$flag[$i]=0;
}
for ($i = 0; $i <= $length; $i++) {
for ($j = $i + 1; $j <= $length; $j++) {
if ($input[$i] + $input[$j] == 0 && $flag[$i]==0 && $flag[$j]==0) {
$count++;
$flag[$i]=1;
$flag[$j]=1;
}
}
}
echo $count;
?>
上面给出了正确的代码。因为你必须标记已经用于制作对的元素。例如,你有两个+3和一个-3,因为你没有标记它就会生成2对,它已经与现有的一对成对。
答案 1 :(得分:0)
你做了两个for循环,所以你要计算两次。您可以进行一些测试,您在函数中插入的每个输入数组都将返回偶数。然后在最后做$count = $count/2;
。
答案 2 :(得分:0)
你需要定义它为什么不起作用 - 它只是发现7 + -7 6次:所以你需要标记这个匹配已被发现,如下面的代码 - 添加了一些输出,这样你就可以看到什么是发生:
$input = array (3, 6, -3, 5, -10, 3, 10, 1, 7, -1, -9, -8, 7, 7, -7, -2, -7);
$length = count($input) - 1;
$count = 0;
$matched = array();
for ($i = 0; $i < count($input); $i++) {
echo "<br />Group ".$i.": <strong>".$input[$i]."</strong>, ";
$groupmatch = 0;
$matchon = "";
for ($j = $i + 1; $j < count($input); $j++) {
echo $input[$j].", ";
$check = $input[$i] ."+". $input[$j];
if ($input[$i] + $input[$j] == 0 && !array_search($check,$matched)) {
$count++;
$groupmatch++;
$matchon .= $check.", ";
array_push($matched, $check);
}
}
echo "<br />Groupmatch: ".$groupmatch."<br/>";
echo $matchon."<br />";
}
echo $count;