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

Нужна реализация функции на 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"
Гость
Ответ(ы) на вопрос:
Гость
0.5, '311'=>0.375, '312'=>0.1);      function rec($str) {     $sum = 0;     foreach ($str as $i) #Вычисляем уже имеющуюся сумму       $sum += $GLOBALS["arr"][$i];     if ($sum == 1.5)       $GLOBALS["result"][] = $str;     if ($sum > 1.5) 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); ?>
Не нашли ответ?
Ответить на вопрос
Похожие вопросы