我正在尝试使用php代码打印出pascals三角形(对角线样式,如此http://www.cut-the-knot.org/arithmetic/combinatorics/PascalTriangle.gif)
我试过这段代码:
<?php
$f = 10;
for ($x = 0; $x <= $f; $x++) {
echo "1"." ";
$previous_line[$x]=1;
}
echo "<br>";
for ($x = 0; $x < $f; $x++) {
echo "1"." ";
for ($y = 1; $y <= $f-$x-1; $y++) {
$sum = 0;
for ($z = 0; $z <= $y; $z++) {
$sum = $sum + $previous_line[$z];
}
echo $sum." ";
}
echo "<br>";
}
但我得到了这个输出:
1 1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
我做错了什么?
答案 0 :(得分:1)
我认为您为每一行使用相同的 $ previous_line [$] 值,因此 $ sum 的迭代值将不断增加。 (增加1 )
您应该在每一行更新 $ previous_line [$] 值:
$previous_line[$y] = $sum;
并且您不需要使用此迭代:
for ($z = 0; $z <= $y; $z++) {....}
这是完整的代码:
<?php
$f = 10;
for ($x = 0; $x <= $f; $x++) {
echo "1"." ";
$previous_line[$x]=1;
}
echo "<br>";
for ($x = 0; $x < $f; $x++) {
$sum = 1;
echo $sum." ";
for ($y = 1; $y <= $f-$x-1; $y++) {
$sum = $sum + $previous_line[$y];
echo $sum." ";
$previous_line[$y] = $sum;
}
echo "<br>";
}
试试吧
答案 1 :(得分:1)
因为贾斯汀打败了我,但我会发布一个改进版本。 请注意,可能有更好的方法来执行此操作。
我删除了你的第一个循环,因为它不需要,然后我在第二个循环中移动$ previous_line并检查以确保它被设置。最后我更新$ currentSum并分配
particleSpeed
的结果。
$totalToLoop = 10;
for ($x = 0; $x <= $totalToLoop; $x++) {
$currentSum = 1;
echo '1 ';
for ($y = 1; $y <= ($totalToLoop - $x); $y++) {
if (!isset($previous_line[$y])) {
$previous_line[$y] = 0;
}
printf('%d ', $currentSum = ($currentSum + $previous_line[$y]));
$previous_line[$y] = $currentSum;
}
echo '<br>';
}