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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.