生成所有总和组合
Posted
技术标签:
【中文标题】生成所有总和组合【英文标题】:Generate all sum combinations 【发布时间】:2011-09-05 12:18:45 【问题描述】:给定一组 6 个数字,例如 1,5,8,9,2,6 和 2 个操作数,例如 + 和 - 我想知道您将如何生成所有可能的有效和,例如 1+8=9 等等.
数字可以是正数 0-9,操作数可以是 +-/* 平方和平方根
如果有人能提供帮助,我将不胜感激。
谢谢
【问题讨论】:
你能解释一下“有效”是什么意思吗? valid 是指计算的整数组合,例如 1+2=3 有效,1+4=3 无效 【参考方案1】:因为它是一个集合,并且数字的范围是 [0,9] - 一个简单的解决方案将是回溯,最多需要 3^n 伪代码:
solution(set,aFormula,op1,op2):
if set == []: print calculate(aFormula)
else:
solution(set[1-set.end],aForumula,op1,op2)
solution(set[1-set.end],op1(aFormula,set[0]),op1,op2)
solution(set[1-set.end],op2(aFormula,set[0]),op1,op2)
注意 - 您可能需要对一元运算进行额外处理,但不会对算法产生太大影响。
【讨论】:
【参考方案2】:"正数0-9"
0 不是正数。
"操作数可以是 +-/* 平方和平方根"
平方和平方根只接受一个参数,那么如何将它应用于列表的两个元素?
由于您没有在此处指定任何语言,因此您的帖子中所述的添加解决方案:
a = [1, 5, 8, 9, 2, 6]
print set ( [x + y for x in a for y in a] )
这允许相同元素与其自身相加,如果不打算这样做,请相应地更改它。 根据需要使用其他运算符。
非常详细的 C 语言示例:
#include <stdio.h>
void main ()
int list [6] = 1,5,8,9,2,6;
int i, j;
for (i = 0; i < 6; i++)
for (j = i + 1; j < 6; j++)
printf ("%d + %d = %d\n", list [i], list [j], list [i] + list [j] );
【讨论】:
感谢您的回答,抱歉我想在objective-c中询问示例 好的,我在您的帖子中添加了“objective-c”标签。抱歉,objective-c 无法帮助您。但想法是一样的。取数字向量,用向量(或向量减去给定元素)压缩向量的每个元素,并将所需的操作应用于所有结果元组。忽略重复的结果。 谢谢,添加了 C 标记,因为我也对 C 中的代码感到高兴。现在就尝试一些东西 @Jonathan 我在回答中包含了一个详细的 C 示例。【参考方案3】:好吧,因为只有 6*5*4(从集合中挑选数字)*4(操作数),您可以轻松生成所有可能的排列并检查每个排列的有效性。我无法在目标 c 中提供代码,但您可以使用嵌套循环来获取所有可能的排列、执行计算并在计算结果与您在排列中选择为“结果”的数字匹配时打印排列
【讨论】:
以上是关于生成所有总和组合的主要内容,如果未能解决你的问题,请参考以下文章