我有一个数字分数(百分比),我想为所有数字的每个可能组合计算产品,并且它们与100%的差异。
例如,对于以下数字: 0.3,0.4,0.6,0.7
我想计算以下内容:
(1-0.3)*(1-0.4)*(1-0.6)*(1-0.7)
0.3*0.4*0.6*0.7
0.3*(1-0.4)*(1-0.6)*(1-0.7)
(1-0.3)*(1-0.4)*(1-0.6)*0.7
(1-0.3)*0.4*(1-0.6)*(1-0.7)
(1-0.3)*(1-0.4)*0.6*(1-0.7)
0.3*(1-0.4)*(1-0.6)*0.7
0.3*(1-0.4)*0.6*(1-0.7)
(1-0.3)*(1-0.4)*0.6*0.7
(1-0.3)*0.4*(1-0.6)*0.7
(1-0.3)*0.4*0.6*(1-0.7)
0.3*0.4*(1-0.6)*(1-0.7)
(1-0.3)*0.4*0.6*0.7
0.3*(1-0.4)*0.6*0.7
0.3*0.4*(1-0.6)*0.7
0.3*0.4*0.6*(1-0.7)
我希望能够为任何n个数字构建这个(这里我给出了4个数字的例子,但可能有成百上千个)。怎么称呼?他们有命令吗?某处是否有已知的脚本? 最后,我需要总结一下。并且也可以单独使用它们。
答案 0 :(得分:1)
我认为在任何语言中都没有预先定义的命令,但大多数语言都允许您为此编写递归函数。例如,在Haskell中你可以使用:
calculate [] = [[]]
calculate (x:xs) = let rec = calculate xs
pos = map (x:) rec
neg = map ((1 - x):) rec
in pos ++ neg
您可以尝试here并运行您的示例:
main = print (calculate [0.3, 0.4, 0.6, 0.7])
请注意,此calculate
函数将百分比列表作为输入并返回列表列表,每个列表代表所需结果中的一行。然后,此结果可用于计算中间结果和最终结果。
该功能的工作原理如下。如果输入为空列表,则返回包含空列表的列表。如果输入包含元素,则将第一个元素(x
)与列表的其余部分(xs
)分开,并在列表的其余部分计算结果。结果是一个列表,其中包含存储在rec
中的百分比列表。
要计算结果值,请将x
添加到rec
中的每个列表(存储在pos
中),并将1-x
添加到rec
中的每个列表中(存储在neg
)中。结果我们返回一个列表,它是pos
和neg
的串联。