【发布时间】:2014-01-29 10:55:29
【问题描述】:
几天来,我一直在工作,放弃然后重新解决这个问题。我已经研究了很多不同的方法,但是我要么无法正确实现它,要么它不适合我需要它做的事情。
基本上:我有两个数组,前缀和后缀
prefix = { 0, 0, 3, 8, 8, 15}
suffix = { 0, 3, 2, 7, 7, 9, 12, 15 }
我需要:
- 最少使用 3 个组合(2+1 或 1+2),最多使用 6 个 (3+3)。
- 不要多次使用词缀(除非重复(即前缀有两个 8))
最终目标是看看哪些组合可以等于 X。
例如
X = 42
3 + 8 + 8 + 2 + 9 + 12 = 42
0 + 8 + 8 + 7 + 7 + 12 = 42
| Prefix | | Suffix |
15 + 12 + 15 = 42
0 + 15 + 0 + 12 + 15 = 42
我已尝试研究 Permutations、IEnumerables、Concat 等,但找不到可以成功完成此操作的方法。
这些是我需要使用的“完整”数组。
public int[] Prefix = {0, 6, 6, 8, 8, 8, 8, 8, 8, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 16, 15, 15, 18, 18, 18, 18, 18, 18, 23 };
public int[] Suffix = {0, 3, 3, 9, 11, 11, 11, 17, 18, 18, 20, 25, 25, 27, 30, 30};
感谢任何帮助,如果我不清楚任何事情,我会尽可能澄清,谢谢!
编辑:还建议我运行它以等同于所有可能的结果并将其存储在哈希表中以在使用正确值时使用?不确定哪个效果最好。
【问题讨论】:
-
这个任务没有内置的解决方案,你必须自己想出一个算法。
-
就我个人而言,我建议使用暴力破解 X。
-
你可以使用 4+2 或 5+1 词缀吗?
-
@Douglas 我相信每个词缀最多 3 个,最少 1 个,总计数最少 3 个。
-
您打算排除重复项吗?例如,在您的样本中,
Prefix有六个8条目,12有七个条目,Suffix有三个11条目。如果您要求解31的总和,我认为仅基于这些条目就会产生 126 个重复的结果。
标签: c# arrays permutation concat