нужна реализация функции на php.сущность такая, Есть массив

Нужна реализация функции на php.
сущность такая, Есть массив напр:
ar['310']=0.5;
ar['311']=0.375;
ar['312']=0.1;
В массиве может быть как больше так и меньше частей, нужно рассчитать все различные комбинации сумм частей, чтоб в итоге получилось число 1.5.
В данном примере обязано получится
0.5+0.5+0.5=1.5
0.5+0.5+0.1+0.1+0.1+0.1+0.1=1.5
0.5+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1=1.5
0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0. 1+0.1+0.1=1.5
0.375+0.375+0.375+0.375=1.5

Необходимо написать функцию, на входе в которую будет передаваться массив значений и число 1.5 (может быть хоть какое другое), а на выходе массив частей с ключами, которые мы передали сначала.
на выходе в общем обязано получиться что-то типо такового
arr[0]="310,310,310"
arr[0]="310,310,312,312,312,312,312"
arr[0]="310,312,312,312,312,312,312,312,312, 312 ,312"
arr[0]="312,312,312,312,312,312,312,312,312, 312 ,312,312,312,312,312"
arr[0]="311,311,311,311"

Задать свой вопрос
1 ответ
lt;?php
  result = array();
  arr = array ('310'=gt;0.5, '311'=gt;0.375, '312'=gt;0.1);
  
  function rec(str)
    sum = 0;
    foreach (str as i) Вычисляем теснее имеющуюся сумму
      sum += GLOBALS["arr"][i];
    if (sum == 1.5)
      GLOBALS["result"][] = str;
    if (sum gt; 1.5) return;
    foreach (GLOBALS["arr"] as key=gt;value)
      hello = str; Не знаю, как это законно, но заработало только так...
      hello[] = key;
      rec(hello);
   
 
  
  if (min(array_values(arr)) lt;= 0) die(); Бесконечнная рекурсия обязана быть предотвращена
  rec(array());
  
  foreach (result as amp;value) Переделываем массив массивов в массив строк
    value = implode(', ', value);
  unset(value);
  
  print_r(result);
?gt;
Valentina
а как бы теперь оформить это в виде одной функции, чтоб любые значения подставлять можно было?
Даниил Суховик
Ну, хоть какое - это как поглядеть...0.5, '311'=>0.375, '312'=>0.1); function rec(str, arr, rez) sum = 0; foreach (str as i) Вычисляем теснее имеющуюся сумму sum += arr[i]; if (sum == 1.5)
Агата Хабут
GLOBALS["result"][] = str; if (sum > 1.5) return false; foreach (arr as key=>value) hello = str; Не знаю, как это законно, но заработало только так... hello[] = key; rec(hello, arr, rez);
Куцыгина Лилия
if (min(array_values(arr1)) <= 0) die(); Бесконечнная рекурсия обязана быть предотвращена rec(array(), arr1, result); foreach (result as value) Переделываем массив массивов в массив строк value = implode(', ', value); unset(value); print_r(result);?>
Alina Prigoreva
а вот что то типо этого как правильно реализовать?
число 1
число 2
число 3
число 4
число 5
сумма

Арпова Ярослава
Jevelina Vinar
function rec(str) sum = 0; foreach (str as i) Вычисляем теснее имеющуюся сумму sum += GLOBALS["arr"][i]; if (sum == num4) GLOBALS["result"][] = str; if (sum > num4) return; foreach (GLOBALS["arr"] as key=>value) hello = str; Не знаю, как это законно, но заработало только так... hello[] = key; rec(hello);
Александр Возняков
if (min(array_values(arr)) <= 0) die(); Бесконечнная рекурсия обязана быть предотвращена rec(array()); foreach (result as value) Переделываем массив массивов в массив строк value = implode(', ', value); unset(value); print_r(result); return; function summa(ar);?>
Баркалова Полина
не работает чего-то(
, оставишь ответ?
Имя:*
E-Mail:


Последние вопросы

Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт