Кстати, условия ты описал одни, а в примере привел решение для других. Ты пропустил результат 0000 итд. А если он не нужен, тогда замени "for ($ch=0;" на "for ($ch=1;", ну и проверку на то, что символ больше нуля тоже нужно вставить...
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
PHP:$str="2232"; function get_all($str) { if (strlen($str)>1) { $prev_array=get_all(substr($str,1,strlen($str)-1)); } else $prev_array=Array(''); for ($ch=0;$ch<=$str[0];$ch++) { for ($i=0;$i<count($prev_array);$i++) { $cur_array[]=$ch.$prev_array[$i]; } } return ($cur_array); } print_r(get_all($str));
1. ТЗ неправильное.ТС писал, что Но результат генерации не должен быть просто диапазоном от 0 до 2232, в результат генерации должны входить только те значения которые такой же длины как и начальное вхождение.
0000 это 0, а минимальное число, удовлетворяющее условию по идее должно быть 1000, а у ТС в примере это вообще 1111. Отсюда вывод: ТС составил неправильное ТЗ либо сам не знает что хочет получить
Это все конечно замечательно, но твоя ф-я пропускает значения c тройкой на конце(1113,1123 и т.д.). Даже если вручную поссчитать, то для числа 2232, начиная с 1111, 44 возможных варианта1. ТЗ неправильное.
2. "0000" - та же длина, что и у начального значения.
3. Как сделать так, чтобы начиналось с 1 я уже написал
Мы немного по-разному поняли условие задачи. Разрядность каждого знака, как я понял, задается числом, стоящим на этом месте. Поэтому тройки на конце быть не может (ограничение 2). Для числа 2232, начиная с 1111 всего 23 варианта (2*3*2*2-1). Откуда взято число 44 - нипанятна ващеЭто все конечно замечательно, но твоя ф-я пропускает значения c тройкой на конце(1113,1123 и т.д.). Даже если вручную поссчитать, то для числа 2232, начиная с 1111, 44 возможных варианта
Разрядность меняется. Поэтому, считать надо примерно так:Добавлено через 2 минуты
а вообще если знать немного мат. статистику, то для любого числа с заданной вероятностью можно сосчитать количество полученных вариантов. К примеру для числа 3333 это 3^4 = 81 вариант (3 - макс. цифра, 4-номер старшего разряда)
Кстати, условия ты описал одни, а в примере привел решение для других. Ты пропустил результат 0000 итд...
ТС писал, что Но результат генерации не должен быть просто диапазоном от 0 до 2232, в результат генерации должны входить только те значения которые такой же длины как и начальное вхождение.
0000 это 0, а минимальное число, удовлетворяющее условию по идее должно быть 1000, а у ТС в примере это вообще 1111. Отсюда вывод: ТС составил неправильное ТЗ либо сам не знает что хочет получить
А если он не нужен, тогда замени "for ($ch=0;" на "for ($ch=1;", ну и проверку на то, что символ больше нуля тоже нужно вставить...
<?php
$str="2232"; //начальное число
$temp_count = strlen($str);
$count_str=$str[0];
for($i=0; $i < $temp_count; $i++)
{
if ($str[$i+1]<=0)
{
$str[$i+1]=1;
}
$count_str=$count_str*$str[$i+1];
}
echo $count_str; //возможное количество вариаций с учетом начального числа
function get_all($str)
{
if(strlen($str)>1)
{
$prev_array=get_all(substr($str,1,strlen($str)-1));
}
else
{
$prev_array=Array('');
}
for($ch=1;$ch<=$str[0];$ch++)
{
for($i=0;$i<count($prev_array);$i++)
{
$cur_array[]=$ch.$prev_array[$i];
}
}
return ($cur_array);
}
print_r(get_all($str)); //результат генерации
?>
Так варианты нужно посчитать или вывести?...