Làm thế nào để in mẫu này bằng PHP?


10

Làm thế nào để in mẫu này?

mẫu

$number = 5;
for ($i=1; $i <= $number ; $i++) { 
    for ($j=$i; $j >= 1;$j--){
        echo "0";
    }
    echo "\n";
}

Bản in

0
00
000
0000
00000

Tôi đã thử như thế này, nhưng tôi bối rối để in sao và Zero char

for ($i=1; $i <= $number ; $i++) { 
    $sum = 0;
    for ($j=$i; $j >= 1;$j--){
        $sum +=$j;
    }
    echo $i ." => " .$sum ."\n";
}

Bản in

1 => 1
2 => 3
3 => 6
4 => 10
5 => 15

Câu trả lời:


16

Bạn có thể sử dụng str_repeatđể tạo các chuỗi có độ dài cần thiết. Lưu ý rằng đối với các số tam giác, (1, 3, 6, 10, 15, ...)bạn có thể tạo isố thứ tự như i(i+1)/2:

$number = 5;
for ($i = 1; $i <= $number; $i++) {
    echo str_repeat('*', $i * ($i + 1) /2) . str_repeat('0', $i) . PHP_EOL;
}

Đầu ra:

*0
***00
******000
**********0000
***************00000

Bản demo trên 3v4l.org

Để tạo ra một phần tam giác của phần đầu ra theo nghĩa đen (nghĩa là tổng các số từ 1 đến i), bạn có thể sử dụng mã này để thêm $i *và 1 0cho đầu ra trên mỗi lần lặp:

$line = '';
$number = 5;
for ($i = 1; $i <= $number; $i++) {
    $line = str_repeat('*', $i) . $line . '0';
    echo $line . PHP_EOL;
}

Đầu ra:

*0
***00
******000
**********0000
***************00000

Bản demo trên 3v4l.org


1
PHP_EOLdễ di chuyển hơn #jowersayin
Phil

@Phil thật buồn cười ... khi tôi đã sử dụng PHP_EOL trong quá khứ, tôi đã bị chỉ trích vì quá phức tạp ... nhưng cá nhân tôi đồng ý với bạn và sẽ cập nhật.
Nick

3

Đây là một cách khác, trong đó sử dụng cách đọc đúng hơn về logic thay thế. Ở đây, tôi hình thành mỗi dòng tiếp theo bằng cách lấy dòng trước đó, và thêm số lượng số dòng *để các *phần, và sau đó chỉ cần thẻ trên một dấu mới không.

$line = "*0";
$max = 5;
$counter = 1;

do {
    echo $line . "\n";
    $line = preg_replace("/(\*+)/", "\\1" . str_repeat("*", ++$counter), $line) . "0";
} while ($counter <= $max);

Bản in này:

*0
***00
******000
**********0000
***************00000

0

Số lượng các số không bằng $ i trong vòng lặp for. Vì vậy, chúng ta chỉ cần tính toán số lượng sao và sau đó chỉ cần thực hiện một chuỗi thông số

$count = 5;

for ($i=1; $i <= $count; $i++) {

  $stars = 0;
  for($j=1; $j <= $i; $j++) {
    $stars = $stars + $j;
  }

  echo str_repeat('*', $stars).str_repeat('0', $i)."\n";
}

Đầu ra:

*0
***00
******000
**********0000
***************00000

0

$ line = '';

cho ($ i = 1; $ i <= 5; $ i ++) {

$ line = str numpeat ('*', $ i). $ dòng. '0'; // str numpeat () -> nhận chuỗi // độ dài

tiếng vang $ dòng. PHP_EOL; // PHP_EOL ---> đại diện cho ký tự endline .

}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.