我正在尝试将1到1000之间的所有数字相加,这些数字可以被3或5整除。
第一次尝试是直截了当的:
ans1 = 0
for x in 3:999
ans1 += x % 3 == 0 || x % 5 == 0 ? x : 0
end
当我使用函数链接尝试相同的方法时,它无法返回我期望的答案,而是返回0.
ans2 = [3:999] |> x -> x % 3 == 0 || x % 5 == 0 ? x : 0 |> sum
我认为问题是中心函数,因为下面的代码打印了3到999范围内的所有值。所以我知道迭代没有问题。
[3:999] |> x -> println(x)
有人可以帮助我。
答案 0 :(得分:0)
我发现原因是因为我不理解被解析的类型。这是一个例子:
[3:999] |> println(typeof(x)) # Array{Int64,1}
意味着要解析的值是integer64的数组。所以评估以下内容:
[1:999] % 3 == 0 # false
所以我的答案是使用过滤功能,这是一个例子:
ans3 = sum(filter(x -> x % 3 == 0 || x % 5 == 0,[1:999]))
使用函数链的最终答案是:
ans4 = [1:999] |> x -> filter(y -> y % 3 == 0 || y % 5 == 0,x) |> sum
评估预期答案。