【发布时间】:2014-05-05 22:07:00
【问题描述】:
首先:无论你用哪种编程语言都可以解决这个问题,我很容易将它转换成任何其他语言。
我有一个很难解决的问题,我不知道如何开始。我有 X 种水果和正好 5 种颜色(比如说红色、绿色、黄色、蓝色和紫色)。每种水果都有多种颜色可供选择(但至少有 1 种)。当我需要每种颜色的正好 1 个水果但两次没有水果时,我如何找到每种组合(所以总是会购买正好 5 种不同颜色的正好 5 种不同的水果 )?
例如:
1. Pears are available in [Red, Green, Yellow]
2. Apples are available in [Red, Green]
3. Plums are available in [Purple]
4. Grapes are available in [Red, Green, Purple]
5. Bananas are available in [Blue, Yellow]
由于香蕉是唯一可用的蓝色水果,因此可以肯定的是,香蕉将以蓝色而不是黄色购买。
这些将是此列表的解决方案:
1. Yellow Pear, Red Apple, Purple Plum, Green Grapes, Blue Banana
2. Yellow Pear, Green Apple, Purple Plum, Red Grapes, Blue Banana
这里不可能有其他组合。是否有任何算法可以对动态列表执行此操作,该列表也可能有超过 5 个水果?
我知道,这是一个相当困难的问题,但也许有人有一个简单的解决方案。
【问题讨论】:
-
对于这样一个小问题,您可以简单地测试所有 $5^{5}$ 组合并检查其有效性。 [或使用回溯]
-
是的,这就是我尝试的。但我仍然不知道如何做到这一点。有没有一种简单的方法可以从 2 个 1D 数组中创建 2D 数组?
标签: algorithm combinations combinatorics