วิธีพิมพ์รูปแบบนี้ด้วย PHP?


9

วิธีการพิมพ์รูปแบบนี้?

แบบแผน

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

พิมพ์

0
00
000
0000
00000

ฉันพยายามเช่นนี้ แต่ฉันสับสนในการพิมพ์ดาวและ Zero char

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

พิมพ์

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

คำตอบ:


17

คุณสามารถใช้str_repeatเพื่อสร้างสตริงของความยาวที่ต้องการ โปรดทราบว่าสำหรับตัวเลขสามเหลี่ยม(1, 3, 6, 10, 15, ...)คุณสามารถสร้างiหมายเลข 'th เป็น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;
}

เอาท์พุท:

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

ตัวอย่างบน 3v4l.org

สำหรับการสร้างตัวอักษรที่เป็นรูปสามเหลี่ยมมากขึ้นของส่วนที่เป็นรูปสามเหลี่ยมของเอาท์พุท (เช่นผลรวมของตัวเลขจาก 1 ถึง i ) คุณสามารถใช้รหัสนี้ซึ่งเพิ่ม$i *'s และ 1 0ไปยังเอาต์พุตในแต่ละการวนซ้ำ:

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

เอาท์พุท:

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

ตัวอย่างบน 3v4l.org


1
PHP_EOL#justsayin เป็นแบบพกพามากขึ้น
Phil

@Phil ตลก ... เมื่อฉันใช้ PHP_EOL ในอดีตฉันถูกวิพากษ์วิจารณ์ว่ามีความซับซ้อนเกินจริง ... แต่โดยส่วนตัวฉันเห็นด้วยกับคุณและจะอัปเดต
Nick

3

นี่เป็นอีกวิธีหนึ่งซึ่งใช้การอ่านตรรกะการแทนที่อย่างแท้จริง ที่นี่ผมรูปแบบแต่ละบรรทัดต่อมาโดยการใช้บรรทัดก่อนหน้าและเพิ่มปริมาณที่หมายเลขสาย*ไปยัง*ส่วนและจากนั้นแท็กเพียงแค่ในศูนย์ต่อท้ายใหม่

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

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

ภาพพิมพ์นี้:

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

0

จำนวนศูนย์เท่ากับ $ i ในการวนรอบ ดังนั้นเราต้องคำนวณจำนวนดาวแล้วทำ 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";
}

เอาท์พุท:

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

0
$line = '';

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

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

   echo $line . PHP_EOL; // **PHP_EOL** ---> represents the endline character.

}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.