如何在Haskell中执行此操作?

时间:2019-05-23 01:12:30

标签: haskell

我在作业上需要一些帮助,我必须在haskell中创建一个数组,其中必须通过指针“ i”和“ j”找到两个数字,其结果是用户写入的数字。 例如:

用户输入数字7,因此程序必须遍历两个侧面进行比较的每个数字(指针“ i”和“ j”;“ i”从头到右,“ j”从头到尾)。左),如果总和的结果与用户输入的结果相同。 [1,2,3,4,5,6,7]。

我不知道我是否在解释自己,希望您能帮助我。 例如,“ i”在位置1上,“ j”在位置4上。 我= 2 j = 5所以“ i” +“ j” = 7

然后我必须打印找到“ I”和“ j”的位置。

1 个答案:

答案 0 :(得分:2)

使用列表推导很容易进行编码:

findIt :: (Num a, Eq a) => [a] -> a -> [(Int, Int)]
findIt xs it = [ (i,j) | (j,y) <- reverse $ zip [0..] xs, 
                         (i,x) <- zip [0..] xs, 
                         i<=j, x+y == it ]

GHCi> findIt [1..10] 18
[(7,9),(8,8)]

上面的代码在列表中的条目数上当然是二次的。

有效地进行编码是一个有趣的算法问题。