所以我有一个简单的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
它应该用一个数组完成,但我似乎无法弄清楚算法。
我想我在这里忽略了一些简单的东西。
答案 0 :(得分:1)
尝试这样的事情:
<?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']
为零或甚至低于零,则此操作无效。
答案 1 :(得分:1)
您实际上并不需要循环来执行arithmetic progression。像这样的算术级数可以使用公式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 = 1 1+2 = 3 1+2+3 = 6 1+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 = 5 5+6 = 11 5+6+7 = 18 5+6+7+8 = 26
答案 2 :(得分:1)
这是我能想到的最简单的方式......
$num = intval($_GET['number']);
$intArray = range(1,$num);
echo implode(" + ",$intArray)." = ".array_sum($intArray);
答案 3 :(得分:0)
因此,假设您正在使用$_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
}
}
答案 4 :(得分:-1)
<?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;
}
答案 5 :(得分:-1)
最大限度地使用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