Как напечатать целое число в форме треугольника

Я хочу напечатать целое число в форме треугольника, которое выглядит так

1 121 12321 

Я пробовал это, но я не получаю фактического результата

 for($i=1;$i<=3;$i++) { for($j=3;$j>=$i;$j--) { echo "&nbsp;&nbsp;"; } for($k=1;$k<=$i;$k++) { echo $k; } if($i>1) { for($m=$i; $m>=1; $m--) { echo $m; } } echo "<br>"; } 

Вывод этого кода:

  1 1221 123321 

Где я ошибаюсь, пожалуйста, направляйте меня.

Другое целочисленное решение:

 $n = 9; print str_pad ("&#10029;",$n," ",STR_PAD_LEFT) . PHP_EOL; for ($i=0; $i<$n; $i++){ print str_pad ("", $n - $i); for ($ii=-$i; $ii<=$i; $ii++){ if ($i % 2 != 0 && $ii % 2 == 0) print "&#" . rand(10025,10059) . ";"; else print $i - abs($ii) + 1; } print PHP_EOL; } ✭ 1 1✬1 12321 1❊3✪3✳1 123454321 1✼3✶5❃5❈3✸1 1234567654321 1✾3✯5✿7❉7✫5✷3✶1 12345678987654321 

Если у вас уже есть строка, вы можете:

 $n = 9; $s = "12345678987654321"; $i = 1; while ($i <= $n) echo str_pad ("", $n-$i) . substr ($s,0,$i - 1) . substr ($s,-$i++) . PHP_EOL; 

Ваш код должен быть следующим:

 for($i=1;$i<=3;$i++) { for($j=3;$j>$i;$j--) { echo "&nbsp;&nbsp;"; } for($k=1;$k<$i;$k++) /** removed = sign*/ { echo $k; } if($i>=1) /**added = sign*/ { for($m=$i; $m>=1; $m--) { echo $m; } } echo "<br>"; } 

Попробуй это.

Детали:

  1. Ваша петля неправильна, как в случае for($k=1;$k<=$i;$k++) , это будет печатать повторяющееся число, когда вы проверяете условие на меньшее и снова равное. Поэтому удалите знак равенства.

  2. Причина добавления знака eqaul в if($i>=1) заключается в том, что первый элемент не будет печататься, если не будет равным, так как сначала он будет печатать по циклу, откуда удаляется знак равенства.

Ваш результат будет следующим:

  1 121 12321 

Для всех любителей x-mas:

 $max = 9; # can be 2 .. 9 for($i = 1; $i <= $max; $i++) { $line = (str_pad('', $max - $i)); for($ii = 1; $ii <= $i; $ii++) { $line .= $ii; } for($ii = $i-1; $ii > 0; $ii--) { $line .= $ii; } echo $line . PHP_EOL; } 

Вывод:

  1 121 12321 1234321 123454321 12345654321 1234567654321 123456787654321 12345678987654321 

Удивительно, что компьютеры могут достичь в наши дни! Не так ли?

Немного поздно для вечеринки, но вот еще одно решение, которое использует цикл «for» с двумя переменными инициализации и трехмерным приращением / декрементом. Это неортодоксальное использование цикла «для», но оно по-прежнему абсолютно корректно и, возможно, делает код более изящным и понятным. Я решил добавить пространство до и после каждой точки с запятой и опустить все другое пространство внутри круглых скобок, чтобы было легче визуализировать каждую из трех частей цикла «for» (инициализация, условие, приращение / декремент):

 $count = 9; echo "<pre>"; for ($i=1; $i<=$count; $i++) { echo str_pad("",$count-$i," ",STR_PAD_LEFT); for ( $j=1,$up=true ; $j>0 ; $up?$j++:$j-- ) { echo $j; if ($j==$i) {$up = false;} } echo "<br>"; } echo "</pre>"; 

Вывод:

  1 121 12321 1234321 123454321 12345654321 1234567654321 123456787654321 12345678987654321