首页 > 解决方案 > 嵌套循环头痛 PHP

问题描述

你会如何回答这样的问题?我知道我必须使用循环,但我目前的答案不允许我超过大约 5 的输入,这是非常低效的。我发现嵌套循环有点令人生畏。

给定连续奇数的三角形:

         1
      3     5
   7     9    11

...从行索引计算这个三角形的行总和(从索引 1 开始)

rowSumOddNumbers(1); // 1
rowSumOddNumbers(2); // 3 + 5 = 8

免责声明 - 这不是一个测试问题。只是我正在努力解决的练习之一。

自发布此消息以来,我找到了一个有效的答案(三个小时后......)工作代码:

function rowSumOddNum($n) {

   $start = ($n *($n - 1)) + 1; 
    $sum = 0;    
    $step = $start +($n*2);

 for($a=$start;$a<$step;$a++){

        if($a % 2 !== 0){            
             $sum = $sum + $a;
        }
    } echo $sum;
}

这是我正在使用的原始代码,它不断崩溃,说它没有足够的内存。我相信非常低效。

function rowSumOddNumbers($n) {

    $len = $n + ($n*1);

    $array = [];
    for ($i = 1; $i <= $len; $i+2) {
        if ($i % 2 == 1) {
            $array[] = $i;
        }
    }
    $count = 0;
    $answer = 0;

    for ($row = 1; $row < $n; $row++) {
        $count = $count + $row;
    }

    $length = $count + $n;
    for ($a = $count; $a <$length; $a++) {
        $answer = $answer + $array[$a];
    }
    echo $answer;
}

标签: phploops

解决方案


我喜欢这个挑战,所以就在这里。无论三角形有多大,这都应该可以完成。

<?php
$triangle = array(1,5,11,9,7,3);
$u = 1;
$results = array();
$sumrow =0;
for($i=0; $i<=count($triangle); $i++){
    if($i == count($triangle)){
        $sumrow += $triangle[0]; // for the last row add the first number of array
    }else{
        $sumrow += $triangle[$i];
    }
    if(is_int($u/3)){ // for every third number store results and use the same number again
        $i--;
        $u = 1;
        array_push($results, $sumrow);
        $sumrow = 0;
    }else{
        $u++;
    }
}
echo json_encode($results);
?>

推荐阅读