PHPを使用してこのパターンを印刷する方法は?


10

このパターンを印刷するには?

パターン

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

プリント

0
00
000
0000
00000

私はこのようにしてみましたが、星とゼロ文字を印刷するのに混乱しています

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次のように'番目の数値を生成できることに注意してください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 *と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を使用したことがあるので、複雑すぎると非難されてきました...でも個人的にはあなたに同意し、更新します。
ニック

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

ゼロの数はforループの$ 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 = '';

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

$ line = str_repeat( '*'、$ i)。$ line。'0'; // str_repeat() -> getting string //長さ

$ lineをエコーし​​ます。PHP_EOL; // PHP_EOL --->はエンドライン文字を表します。

}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.