Как я могу создать пирамиду из-за использования php?

Мне нужно создать пирамиду, используя звездочки. Я указываю значение, которое становится основой пирамиды. База содержит столько же звездочек, сколько указано, и пирамида должна пропустить свои строки на 1. Здесь я столкнулся с проблемой, когда я указываю четное число базы.

Пирамида должна выглядеть так, как показано ниже.

* *** ***** ******* ********* ********** 

я осознаю

 ####* ###*** ##***** ###***** ####***** ********** 

Я хочу заменить # на пустое место, и я получаю ошибку, что количество звездочек в 4-й строке уменьшилось. Как исправить эти две ошибки?

 function create_pyramid($limit){ if ($limit > 0){ for ($row =0;$row<=$limit;$row++){ if (($row % 2 == 0) && ($row != $limit)){ continue;} $rows = ""; for ($col =0;$col<$row;$col++){ $rows= $rows.'*'; } $pattern = "%'#".((($limit - $row)/2)+$row)."s\n"; printf ($pattern,$rows); print '<br />'; } } else{ print "Invalid data"; } } create_pyramid(10); 

Просто сделайте это проще:

 function create_pyramid($limit) { for($row = 1; $row < $limit; $row ++) { $stars = str_repeat('*', ($row - 1) * 2 + 1); $space = str_repeat(' ', $limit - $row); echo $space . $stars . '<br/>'; } } echo "<pre>" ; create_pyramid(10); 

Я предпочитаю мой:

  echo '<pre>'; $n = 5; function print_tree($n, $str, $max) { for ($i = 0; ($i < (($max - $n) / 2)); $i++) { echo "&nbsp;"; } for ($i = 0; ($i < $n); $i++) { echo $str; } echo "<br/>"; } for ($flag = 0; ($flag < 2); $flag++) { for ($a = 1, $b = 1, $c = 1, $d = 4; (($d - 3) <= $n); $a += 2, $b++) { if ($flag == 1) { print_tree($a, "*", $max); } if ($b == $d) { if ($flag == 0) { $max = $a; } if (($d - 3) != $n) { $a -= ((2 * $c) + 2); } $b = 0; $d++; if (($d % 2) == 0) { $c++; } } } } if ((($foot = $n) % 2) == 0) { $foot++; } for ($i = 0; ($i < $foot); $i++) { print_tree($foot, "|", $max); } 

выходы:

  * *** ***** ******* ***** ******* ********* *********** ************* *********** ************* *************** ***************** ******************* ********************* ***************** ******************* ********************* *********************** ************************* *************************** ***************************** ************************* *************************** ***************************** ******************************* ********************************* *********************************** ************************************* *************************************** 

||

||

||

||

||

Или даже этот:

 <?php $n = 8; ob_start(); $stars = ($n - 1) * 2 + 1; $spaces = 0; for ($i = 0; ($i < $n); $i++) { echo str_repeat(' ', $spaces); echo str_repeat('*', $stars); echo ' '; echo str_repeat(' ', $spaces * 2); echo str_repeat('*', $stars); echo "\n"; $spaces += 1; $stars -= 2; } $stars = ($n - 1) * 2 + 1; $spaces = 0; $margin = $stars / 2 + 1; for ($i = 0; ($i < $n); $i++) { echo str_repeat(' ', $margin); echo str_repeat(' ', $spaces); echo str_repeat('*', $stars); echo "\n"; $spaces += 1; $stars -= 2; } echo trim(implode("\n", array_reverse(explode("\n", ob_get_clean()))), "\n"), "\n"; 

это дает:

  * *** ***** ******* ********* *********** ************* *************** * * *** *** ***** ***** ******* ******* ********* ********* *********** *********** ************* ************* *************** *************** 

смешные упражнения не так ли … 😎

Можешь попробовать

 create_pyramid("*", 5); create_pyramid("@", 10); create_pyramid("^_^", 10); function create_pyramid($string, $level) { echo "<pre>"; $level = $level * 2; for($i = 1; $i <= $level; $i ++) { if (!($i % 2) && $i != 1) continue; print str_pad(str_repeat($string, $i),($level - 1) * strlen($string), " " , STR_PAD_BOTH); print PHP_EOL; } } 

Выход A

  * *** ***** ******* ********* 

Выход B

  @ @@@ @@@@@ @@@@@@@ @@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ 

Выход C

  ^_^^_^^_^ ^_^^_^^_^^_^^_^ ^_^^_^^_^^_^^_^^_^^_^ ^_^^_^^_^^_^^_^^_^^_^^_^^_^ ^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^ ^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^ ^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^ ^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^ ^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^ 
 <?php $n=9; for($i=0; $i<=$n; $i++) { for($j=1; $j<=$i; $j++) echo "&nbsp;"; for($k=1; $k<=$n-$i; $k++) echo $k; for($j=($k-2); $j>0; $j--) echo $j; for($k=1; $k<=$i; $k++) echo "&nbsp;"; echo "</br>"; } ?> 
 function create_row($num, $limit) { $append = ''; if($limit > $num && ($limit - $i) % 2 == 0) { $append .= '-'; } $stars = str_repeat('*', $num); $ap_len = floor(($limit - $num) / 2); $prepend = str_repeat('-', $ap_len); $append .= str_repeat('-', $ap_len); return $prepend . $stars . $append; } function create_pyramid($limit){ if ($limit > 0){ $no_last = false; for($i = 1; $i <= $limit; $i += 2) { print create_row($i, $limit) . PHP_EOL; if($i == $limit) { $no_last = true; } } if(!$no_last) { print create_row($limit, $limit) . PHP_EOL; } } } create_pyramid(10); 

Из того, что я понимаю, то, что вы ищете, является нечетной пирамидой, то есть число * в каждой строке равно числу нечетных рядов чисел, например 1,3,5,7. Если вы хотите включить инструкции «if-else», вы можете перейти к указанным выше циклам, но если вы хотите использовать только циклы «для», вы можете использовать следующий код:

 <?php $x=1; for($i=1;$i<7;$i++) { for($j=7;$j>$i;$j--) { echo '&nbsp;&nbsp;'; } for($k=1;$k<=$x;$k++) { echo '*'; } $x=$x+2; echo "<br/>"; } ?> 

Я думаю, что самым простым решением является создание 2 циклов с условием:

 $n = 5; // specify how many rows you want to $stars = 0; for ($i = $n; $i > 0; $i--) { for ($j = 0; $j < $i + $stars; $j++) { if ($j < $i - 1) { echo " "; } else { echo "*"; } } $stars += 2; echo "\n"; } 

Выход будет:

  * *** ***** ******* ********* 
 <?php $l=5; for ($i=1; $i <=5; $i++) { for ($k=1; $k < $l ; $k++) { echo '&nbsp;'; } for ($j=0; $j<$i; $j++) { echo '*'; } $l--; echo "<br>"; } ?> 
 function create_piramide ($filas) { $n = $filas; echo '<pre>'; for ($i = $filas; $i >= 0; $i--) { echo str_repeat(' ', $i).str_repeat('o ', $n - $i)."\n"; } echo '</pre>'; } create_piramide (10); 

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

  $num = 5; for($row = 1; $row <= $num; $row++){ for($colspace = 1; $colspace <= $num-$row; $colspace++){ echo "&nbsp;"; } for($col = 1; $col <= $row; $col++){ echo "* "; } echo "<br />"; } 
 function pyramid($height) { for ($i = 1; $i <= $height; $i++) { echo str_repeat("&nbsp;&nbsp;", $height - $i); echo str_repeat('*', $i * 2 - 1) . '<br/>'; } } pyramid(5); 

Форма алмаза

  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <?php $num=15; $num2=0; $half = $num; for($i=$num2; $i<=$num; $i++) { for($j=$half; $j>$i; $j--) { echo "&nbsp;&nbsp;"; } for($j=$num2; $j<=$i; $j++) { echo "&nbsp;*&nbsp;"; } echo "<br>"; } for($i=$num2; $i<=$num; $i++) { for($j=$num2; $j<=$i; $j++) { echo "&nbsp;&nbsp;"; } for($j=$half; $j>$i; $j--) { echo "&nbsp;*&nbsp;"; } echo "<br>&nbsp;"; } ?> 
 <?php ini_set('display_errors', 1); /** * Here is my solution for printing the pyramid using a class */ class pyramid { function __construct($rows) { for ($k=1; $k <= $rows ; $k++) { $this->space($rows,$k); $this->left($k); $this->right($k); echo "<br>"; } } public function left($k) { for ($i=1; $i < $k ; $i++) { echo $i; } } public function right($i) { for ($j=$i; $j >= 1 ; $j--) { echo $j; } } public function space($rows,$k) { for ($i=$rows-$k; $i > 0 ; $i--) { echo "&nbsp;"; } } } $pyramid = new pyramid(5); ?> <style type="text/css"> body{ font-family: monospace; font-size: 24px; } </style>