PHP从一个数组中找到一对元素,其总和等于给定的数字

时间:2017-11-19 18:44:15

标签: php arrays loops

我有一个数字,其中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;

3 个答案:

答案 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;