给定一组6个数字,例如1,5,8,9,2,6和2个操作数,例如+和 - 我想知道如何生成所有可能的有效总和,例如1 + 8 = 9等等
数字可以是正数0-9,操作数可以是+ - / *平方和平方根
如果有人能提供帮助,我会非常感激。
由于
答案 0 :(得分:2)
因为它是一个集合,并且数字的范围是[0,9] - 一个简单的解决方案将是回溯的,需要3 ^ n <1。最多3 ^ 10次迭代。只是迭代所有可能性(每个元素可以在列表内/外,以及在两个元素之间'连接'的所有可能性。对于一元的oparations:with it / out out)。
伪代码:
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)
注意 - 您可能需要额外处理一元操作,但它不会更改算法。
答案 1 :(得分:1)
“正数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] );
}
答案 2 :(得分:1)
好吧,因为只有6 * 5 * 4(从集合中挑选数字)* 4(操作数),您可以轻松生成所有可能的排列并检查每个排列的有效性。我无法在目标c中提供代码,但如果计算结果与您在排列中选择为“结果”的数字相匹配,则可以使用嵌套循环来获取所有可能的排列,执行计算并打印排列