Bagaimana cara mencetak pola ini menggunakan PHP?

10

Bagaimana cara mencetak Pola ini?

pola

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

Cetakan

0
00
000
0000
00000

Saya sudah mencoba seperti ini, tetapi saya bingung untuk mencetak bintang dan Zero char

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

Cetakan

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

Jawaban:

17

Anda dapat menggunakan str_repeatuntuk menghasilkan string dengan panjang yang dibutuhkan. Perhatikan bahwa untuk bilangan segitiga (1, 3, 6, 10, 15, ...)Anda dapat menghasilkan ibilangan 'th sebagai 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;
}

Keluaran:

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

Demo di 3v4l.org

Untuk generasi yang lebih literal dari bagian segitiga dari output (yaitu jumlah angka dari 1 hingga i), Anda dapat menggunakan kode ini yang menambahkan $i *'s dan 1 0ke output pada setiap iterasi:

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

Keluaran:

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

Demo di 3v4l.org

Nick
sumber
1
PHP_EOLlebih portabel #justsayin
Phil
@Phil lucu ... ketika saya menggunakan PHP_EOL di masa lalu saya telah dikritik karena terlalu rumit ... tapi secara pribadi saya setuju dengan Anda dan akan memperbarui.
Nick
3

Berikut ini cara lain, yang menggunakan pembacaan logika penggantian yang lebih literal. Di sini, saya membentuk setiap baris berikutnya dengan mengambil baris sebelumnya, dan menambahkan jumlah nomor baris *ke *bagian, dan kemudian cukup memberi tanda pada tanda titik nol baru.

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

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

Ini mencetak:

*0
***00
******000
**********0000
***************00000
Tim Biegeleisen
sumber
0

Jumlah nol sama dengan $ i di dalam for loop. Jadi kita hanya perlu menghitung jumlah bintang dan kemudian cukup lakukan str_repeat

$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";
}

Keluaran:

*0
***00
******000
**********0000
***************00000
Parto
sumber
0

$ line = '';

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

$ line = str_repeat ('*', $ i). $ line. '0'; // str_repeat () -> mendapatkan string // panjang

echo $ line. PHP_EOL; // PHP_EOL ---> mewakili karakter endline.

}

Geethma
sumber