所以我有一个简单的for循环从任何给定的数字(get)获得这个结果。
1 + 2 + 3 + 4 = 10
$num = intval($_GET["number"]);
$total = 0;
for ($i = 1; $i <= $num; $i++) {
echo $i;
if ($i != $num) {
echo " + ";
}
$total += $i;
}
echo " = " . $total;
现在我想展示每一步的计算
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
它应该用数组来完成,但我似乎不知道算法是什么。我想我忽略了一些简单的东西。
试试这样:
<?php
$num = intval($_GET["number"]);
//add all numbers to an array
$numbers = array();
for ($i = 1; $i <= $num; $i++)
{
$numbers[] = $i;
//show each array element with ' + ' in between the elements
echo implode(' + ', $numbers);
//show total sum
echo " = " . array_sum($numbers) . "'n";
}
?>
请注意,如果$_GET['number']
为零或甚至低于零,则此操作不起作用。
这是我能想到的最简单的方法…
$num = intval($_GET['number']);
$intArray = range(1,$num);
echo implode(" + ",$intArray)." = ".array_sum($intArray);
实际上不需要循环来执行等差数列。这样的等差数列可以用公式n * (n[-1] + n[1]) / 2
在常数时间内计算。
以4为例,其中n1 = 1
, n2 = 2
, n3 = 3
, n4 = 4
等于4 * (4 + 1) / 2 == 10
。
function progression($n) {
return $n * ($n + 1) / 2;
}
echo progression(4); // 10
然而,要显示任意给定步骤的级数的结果,只需限制该级数的上界(即$n
)。
$n = 4;
for ($i = 1; $i <= $n; $i++) {
$operands = implode('+', range(1, $i));
echo $operands . " = " . progression($i), "'n";
}
输出<>之前1 = 11+2 = 31+2+3 = 61+2+3+4 = 10之前<标题> 泛化这适用于任何线性等差数列,无论上界/下界如何。例如,从5到8的进程仍然是4 * (5 + 8) / 2
,从而得到26
。
所以你可以将这个函数修改为任何线性等差数列的更一般的解。
function progression($size, $start = 1) {
return $size * ($start + ($size + $start - 1)) / 2;
}
$n = 4;
$start = 5;
for ($i = $start; $i <= $n + $start - 1; $i++) {
$operands = implode('+', range($start, $i));
echo $operands . " = " . progression($i - $start + 1, $start), "'n";
}
输出<>之前5 = 55+6 = 115+6+7 = 185+6+7+8 = 26 标题>因此,假设您正在做$_GET['number']
数字的范围,那么您可以做类似的事情(参见代码中的注释以获得进一步的解释):
//This will create an array from 1 to number inclusive
$nums = range(1, $_GET['number']);
//The nums that have been used
$used = array();
//Now loop over that array
foreach($nums as $num){
$used[] = $num; //Add this number to used
if(count($used) > 1){//Dont care about first loop
echo implode(' + ', $used); // put all elements together by + sign
echo ' = ' . array_sum($used) . "<br>"; //Show total plus a break
}
}
<?php
$num = intval($_GET["number"]);
$terms = [1];
for ($i = 2; $i <= $num; $i++) {
$terms[] = $i;
$sum = array_sum($terms);
echo implode(' + ', $terms) . ' = ' . $sum . PHP_EOL;
}
最大限度地使用PHP数组相关函数:
$num = intval($_GET["number"]);
$array = range(1, $num);
for ($i = 2; $i <= $num; $i ++)
{
$slice = array_slice($array, 0, $i);
$total = array_sum($slice);
echo implode(" + ", $slice) . " = " . $total . PHP_EOL;
}
与array_push
$num = intval($_GET["number"]);
$array = array(1);
for ($value = 2; $value <= $num; $value ++)
{
array_push($array, $value);
echo implode(" + ", $array) . " = " . array_sum($array) . PHP_EOL;
}
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10