ascii art — напечатать звезду в PHP, которая принимает одно значение и печатает что-то вроде этого

Если вход 3, то выход должен быть

***
**
*
**
***

Таким же образом, если принятые значения равны 5, то результат должен быть

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

Это то, что я сделал, но это не правильно

<?php
echo "<pre>";
for ($row = 1; $row <= 5; $row++)
{
for ($col = 1; $col <= 6 - $row; $col++)
{
echo '*';
}

echo "\n";
}
for ($row = 1; $row <= 5; $row++)
{
for ($col = 1; $col <= $row; $col++)
{
echo '*';
}

echo "\n";
}
?>

3

Решение

Что с вложенными for петли?

$lineBreak = "\r\n"; // This may need to be <br /> if carriage returns don't show in <pre>
$maxNum = 5;
echo '<pre>';
for ($i = $maxNum; $i > 0; $i--) {
echo str_repeat('*', $i) . $lineBreak;
}
for ($i = 2; $i <= $maxNum; $i++) {
echo str_repeat('*', $i) . $lineBreak;
}
echo '</pre>';

Ради интереса, чтобы устранить еще один for цикл:

$lineBreak = "\r\n";
$maxNum = 5;
$out = '*';
for ($i = 2; $i <= $maxNum; $i++) {
$out = str_repeat('*', $i) . $lineBreak . $out . $lineBreak . str_repeat('*', $i);
}
echo '<pre>' . $out . '</pre>';

Обратите внимание, что этот код не будет действительным с $maxNum < 1,

Чтобы получить значение от пользователя, замените $maxNum линия с…

$maxNum = $_GET['maxNum'];

и загрузите страницу, используя scriptname.php?maxNum=5

4

Другие решения

Однострочник для вас: p

echo implode("\n",array_map(function($n) {return str_repeat("*",$n);},array_merge(range($input,1),range(2,$input))));

Сломано:

  • Создать диапазон чисел от «ввода» до 1
  • Создать диапазон чисел от 2 до «ввода» (предотвращает дублирование «1»)
  • Объедините два диапазона, в результате получится список «вверх-вниз»
  • Замените каждый элемент в массиве соответствующим количеством звездочек
  • Склейте их вместе на новых линиях.

Обратите внимание, что вам может понадобиться <br /> вместо \n выводить в браузере.

2

Я думаю, что ваш профессор ищет рекурсию здесь ..

Нечто подобное должно работать —

function stars($num) {
echo str_repeat('*', $num)."\n";

if ($num > 1) {
stars($num - 1);
echo str_repeat('*', $num)."\n";
}
}
1
По вопросам рекламы [email protected]