-5

I would like to achieve this form:

---*---
--***--
-*****-
*******

So far, i've tried it like this:

    $linii = 7;

    for($i=0; $i<=$linii; $i+=2) {
        echo str_repeat("*", $i)."<br/>";
    }
?>

I don't really know where to go from here.

4

1 回答 1

1

你很亲密。首先,您的循环计数器需要从 , 开始1打印一颗星。从那时起,将其$i视为要在当前行上打印的星数(然后将其增加 2,这很好)。

然后,您只需要计算一下在打印每组星星之前(和之后)要打印多少个破折号。这是一个简单的计算:我们知道一行最多可以有 7 个字符,并且我们知道当前行有多少颗星,所以我们这样做:

dashes_for_this_line = max_chars_per_line - num_stars_on_this_line;

但是,我们需要在星星的一侧打印一半,在另一侧打印一半,所以我们将该数字除以 2。

这在 PHP 中看起来像(注意我已经更改了变量名以使其更具可读性):

$max_chars = 7;

for($num_stars = 1; $num_stars <= $max_chars; $num_stars += 2) {
    $dashes = ($max_chars - $num_stars) / 2;
    echo str_repeat('-', $dashes);    // Print L dashes
    echo str_repeat('*', $num_stars); // Print starts
    echo str_repeat('-', $dashes);    // Print R dashes
    echo '<br />';
}

你可以在这个演示中看到它的工作,我们得到输出:

---*--- 
--***-- 
-*****- 
*******
于 2013-08-26T17:12:29.540 回答