этот код будет делать то, что вы хотите, просто call
функция patternGenerator
с количеством различных чисел, которые вы хотите для вашего примера, эти числа равны 3 (0,1,2).
идея в этом коде состоит в том, чтобы использовать два for loops
, один из которых начинается с минимального числа до максимального, а другой - после максимального числа, уменьшающегося до минимума.
например:
если min = 0
и max = 5
первый loop
напечатает 0,1,2,3,4,5
а второй напечатает 4,3,2,1,0
и это все.
сначала я создал функцию, которая создает только в строке с именем rowGenerator
, она принимает $min
и $max
как parameters
и печатает одну строку
поэтому, если мы хотим напечатать строку, подобную этой: |0|1|0|
, тогда мы будем вызывать эту функцию с min = 0
и max = 1
и
если мы хотим напечатать строку, подобную этой: |1|2|1|
, тогда мы назовем ее с min = 1
и max = 2
.
function rowGenerator($min, $max)
{
echo '<tr>';
for($i = $min; $i<=$max;$i++)
echo '<td>'.$i.'</td>';
for($i = $max-1; $i>=$min;$i--)
echo '<td>'.$i.'</td>';
echo '</tr>';
}
на данный момент мы можем печатать каждую строку независимо. Теперь мы хотим напечатать всю таблицу, если мы посмотрим на вызовы, которые мы делаем для функции rowGenerator
, она будет выглядеть следующим образом:
(min = 0
, max = 1
),
(min = 1
, max = 2
) и
(min = 0
, max = 1
).
минимумы равны (0,1,0).
да, опять та же картина. затем нам нужно два loops
, снова один, чтобы начать с 0
и увеличивать число до достижения 1
, а другой - для цикла с 0
до 0
.
и вот что произошло в функции patternGenerator
. когда вы набираете номер с разными номерами, function
просто получает min
, который всегда будет 0 в вашем случае и max
.
function patternGenerator($numberOfDistinct )
{
echo "<table border =\"1\" style='border-collapse: collapse'>";
$min = 0;
$max = $numberOfDistinct - 2;
for($i = $min;$i<=$max; $i++)
{
rowGenerator($i,$i+1);
}
for($i = $max-1;$i>=$min;$i--)
{
rowGenerator($i,$i+1);
}
echo '</table>';
}
это вывод вызова patternGenerator(3)
:
вывод вызова patternGenerator(5)
: