#php #function #probability #coin-flipping
#php #функция #вероятность #подбрасывание монеты
Вопрос:
Я пытаюсь найти функцию, которая принимает число и выдает ожидаемые результаты следующим образом:
если ввод = 1, то вывод должен быть Array{'0','1'}
если ввод = 2, то вывод должен быть Array{'00','01','10','11'}
если ввод = 3, то вывод должен быть Array{'000','001','010','011','100','101','110','111'}
и так далее.Это похоже на подбрасывание нескольких монет.
Я не знаю, есть ли в php функция, которая это делает, но если нет, может кто-нибудь, пожалуйста, покажите мне, как это делается?
Комментарии:
1. Что вы хотите сделать с результатом? Просто спрашиваю.
Ответ №1:
На самом деле это просто числа от 0 до 2 ^{input}-1 в двоичной записи
$max = pow(2, $input);
$result = array();
for ($i = 0; $i < $max; $i ) {
$result[] = str_pad(base_convert($i, 10, 2), $input, 0, STR_PAD_LEFT);
}
Комментарии:
1. Как насчет создания одной строки, а затем ее разделения на массив в качестве второго шага? Просто идея.
Ответ №2:
То же, что и ответ @KingCrunch, но более лаконичный:
foreach (range(0, pow(2, $input)) as $i)
{
$result[] = sprintf('%0' . $input . 'b', $i);
}
Или, если вам не нравится sprintf
:
foreach (range(0, pow(2, $input)) as $i)
{
$result[] = str_pad(decbin($i), $input, 0, STR_PAD_LEFT);
}