Нужна реализация функции на 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"

нина655 нина655    2   09.06.2019 14:30    2

Ответы
MRSAVVA MRSAVVA  01.10.2020 23:11
<?php
  $result = array();
  $arr = array ('310'=>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);
?>
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика