php - 嵌套循环头痛 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;
}
解决方案
我喜欢这个挑战,所以就在这里。无论三角形有多大,这都应该可以完成。
<?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);
?>
推荐阅读
- html - CSS:如何仅在移动设备上创建 100% 的按钮宽度?
- angular - 如何按集合的嵌套属性对过滤器选项进行分组。单个复选框
- java - 将excel中单词列表中的每个单词与单词列表进行比较 - Java,VBA,Excel
- heroku - Configuration at DNS provider end while adding custom domain purchased from hostinger to web application hosted on heroku
- python - 填充由两只海龟绘制的形状
- javascript - 错误来自“未捕获的 TypeError:notesObj.push 不是 HTMLButtonElement 的函数。
” 。请任何人建议该怎么做 - flutter - Flutter 如何创建顶部带有箭头的盒子容器?
- javascript - 我怎样才能拖动
- sql - Sql:没有从表中正确给出间隔
- pixi.js - 如果单击“覆盖”交互元素的内容,请不要触发交互侦听器