以两个三角形打印文本

问题描述 投票:0回答:5

我只是 PHP 的初学者。我正在尝试编写程序来打印如下数字。

1        1
12      21
123    321
1234  4321
1234554321

我写了以下代码。

<?php

$n=5;
for($i=1; $i<=$n; $i++)
{
    echo "<br />";
    for($j=1; $j<=$i; $j++)
    {
        echo $j;
    }
}

?>

结果显示如下。

1
12
123
1234
12345

我无法像这样扭转它

    1
   21
  321
 4321
54321

我该怎么做?

php loops shapes
5个回答
1
投票

好的。你写的东西挺好的。为了实现您想要的效果,需要进行一些更改。第一个问题是您将其渲染为 HTML - 而 HTML 不渲染空格(我们需要)。有两种解决方案:使用

&nbsp;
来表示空间,并确保使用比例字体,或者将所有内容包装到
<pre>
标签中以实现几乎相同的效果。所以,开始时
echo "<pre>";
,结束时
echo "</pre>";

下一步 - 不要让内循环转到

$i
。每次都让它变成 5,如果
$j <= $i
则打印一个数字,否则打印一个空格。

然后,在这个循环旁边,做另一个循环,但相反(从 5 开始,以 1 结束),但做同样的事情。

中提琴是一种乐器。


1
投票

更通用的解决方案:

<?php
$n = 5;
$seq1 = '';
$seq2 = '';
$format1 = sprintf("%%-%su", $n); //right justified with spaces
$format2 = sprintf("%%%su", $n); //left justified with spaces

for($i=1; $i<=$n;$i++){
  $seq1 .= $i;
  $seq2 = strrev($seq1);
  echo sprintf("$format1$format2\n", $seq1, $seq2);
}

0
投票

这是我对您问题的解决方案。

这不是最好的解决方案,因为它没有考虑到您可能使用大于 9 的数字,在这种情况下,它会使数字彼此不一致。

但重点是,它仍然是解决方案的开始,您可以根据需要进行研究。

您可以使用

array
来存储要打印的数字。 因为数字位于
array
中,这意味着我们可以使用
foreach
循环来确保打印所有数字。

您可以使用 PHP 的

str_repeat()
函数来计算每个数字字符串之间需要放置多少个空格。 仅当您使用具有默认数字索引的数组而不是关联数组时,以下解决方案才有效。 这是因为它在
$key
函数的部分计算中使用了
str_repeat()
变量。 如果您不想使用
$key
变量,那么您应该能够弄清楚如何更改它。

当需要反转数字时,它们已经存储在字符串中,因此您可以使用 PHP 的

strrev()
函数来处理并将它们存储在另一个变量中。

最后,您只需在文档中打印一行,并在末尾换行即可。

请注意,

str_repeat()
函数正在重复
&nbsp;
HTML实体。 这是因为浏览器只会将普通空白压缩为 1 个字符。

另请注意,我添加了一个

style
块来将字体更改为
monospace
。 这是为了确保数字都彼此对齐。

<style>
    html, body {
        font: 1em monospace;
    }
</style>
<?php
$numbers = array(1, 2, 3, 4, 5);
$numbers_length = count($numbers);
$print_numbers = '';
$print_numbers_rev = '';

foreach($numbers as $key => $value) {
    $spaces = str_repeat('&nbsp;', ($numbers_length - ($key + 1)) * 2);
    $print_numbers .= $value;
    $print_numbers_rev = strrev($print_numbers);

    echo $print_numbers . $spaces . $print_numbers_rev . '<br />';
}

编辑:

没有数组的解决方案:

<style>
    html, body {
        font: 1em monospace;
    }
</style>
<?php
$numbers = 9;
$numbers_length = $numbers + 1;
$print_numbers = '';
$print_numbers_rev = '';

for($i = 0; $i <= $numbers; ++$i) {
    $spaces = str_repeat('&nbsp;', ($numbers_length - ($i + 1)) * 2);
    $print_numbers .= $i;
    $print_numbers_rev = strrev($print_numbers);

    echo $print_numbers . $spaces . $print_numbers_rev . '<br />';
}

0
投票
$n = 5;

for ($i = 1; $i <= $n; $i++) {
 $counter .= $i;
 $spaces = str_repeat("&nbsp;", ($n-$i)*2);  
 echo $counter . $spaces . strrev($counter) . "<br/>";
}

0
投票
<div style="position:relative;width:100px;height:auto;text-align:right;float:left;">
<?php

$n=5;
for($i=1; $i<=$n; $i++)
{
    echo "<br />";
    for($j=1; $j<=$i; $j++)
    {
        echo $j;
    }
}

?>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.