В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
bayan6
bayan6
25.07.2020 07:07 •  Информатика

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

Показать ответ
Ответ:
gentleman2
gentleman2
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);
?>
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота