2012-01-09 2 views
0

Я думаю, что есть логическое/математическое решение этой проблемы, и я уверен, что кто-то здесь знает ответ. :)Создание максимально возможных групп

Это написано на PHP.

Допустим, у меня 3 яблока, 3 банана и 3 апельсина.

мне нужно, чтобы иметь возможность создать максимальное количество «Фруктовые корзины возможных» с категориями/требования:


Категория A = Любой фрукты/3 Требуемый

Категория B = Бананы или апельсины/2 Требуемые

Категория C = апельсины/1 Обязательный

Категория D = яблоки или бананы/2 Требуемые


Какое максимальное количество корзин я могу сделать? Мне нужно знать, как получить решение, не обязательно, что такое решение. Я также хотел бы знать, что это называется, если кто-нибудь знает.

Кроме того, эти цифры могут вырасти в тысячи, поэтому я должен иметь возможность сделать это, не разрушая компьютер.

+1

Это домашнее задание? – PeeHaa

+0

Вам нужно, чтобы ваши комбинации корзин были взаимоисключающими или считались с самого начала инвентаризации? –

+0

Если у вас всегда есть одна корзина на группу, вам нужны n корзин (где n - количество групп). Если у вас есть _комбинации_ корзин (например, для B и D), вы получите n! корзины - ваш компьютер умрет некоторое время в двузначных числах, я считаю. –

ответ

1

Чтобы сделать эту работу вам потом нужно настроить и массив условий, массив «инвентаризации» и массив результатов.

Ваш инвентарь должен содержать все «плоды», нужно с количеством доступного в качестве значения:

$inventory = array(
    'oranges' => 2800, 
    'apples' => 1600, 
    'bananas' => 3000, 
) 

Затем необходимо настроить условия для построения каждого типа корзины. Для организации этих условий, вероятно, потребуются субматрицы. Вот пример:

$conditions = array(
    'basketa' => array(
     'alloweditems' => array('oranges', 'apple'), 
     'requireditems' => 2 
    ), 
    'basketb' => array(
     'alloweditems' => array('bananas', 'apple'), 
     'requireditems' => 2 
    ), 
) 

Последний шаг будет в цикле ваши корзины проверки Разрешенный товары и загрузка счет каждого доступных элементов. Объедините их, чтобы получить общее количество доступных фруктов и просто разделите общее количество на количество необходимых фруктов. Чтобы получить округленное число, используйте «FLOAT ($ number)», чтобы получить наименьшее количество возможных корзин ...

+0

Я считаю, что даниэль-критик здесь, здесь, это сочетание. Если я просто зацикливаюсь, это только нахождение одной возможной комбинации, и эта комбинация может даже не выполнить требование. Более того, то, что сказал X-Zero, также кажется правильным, поскольку количество комбинаций, возможно, будет огромным, потенциально убивающим компьютер. – teynon

+0

Вы попросили 2 предмета в бананах и яблоках, никогда не говорили, что вам нужно иметь ровно 1 яблоко и 1 банан. Вы также не сказали, что хотите, чтобы ваши корзины были взаимно эксклюзивными, что в этом случае невозможно догадаться ... –

+0

Это не имеет никакого отношения к коду или программированию. Это простая математическая задача, которая может быть представлена ​​как уравнение комбинаций. Корзина представлена ​​в виде комбинации с определенными требованиями. – danielrsmith

Смежные вопросы