F# 欧拉1号项目。我的答案一直错到100,我不知道';我不知道为什么

F# 欧拉1号项目。我的答案一直错到100,我不知道';我不知道为什么,f#,computer-science,F#,Computer Science,我是计算机科学一年级的学生,之前没有编程方面的知识。有人建议我去解决这些问题,并设法(几乎)解决了这些问题 它指出,您必须对所有数字求和,这些数字是3或5(或两者)的倍数 我在F#中的代码: 设可变n=0 因为我在0..1000做 如果(i%3=0)|(i%5=0),则 n发布此问题的答案,以便于其他人从错误中吸取教训 let mutable n = 0 for i in 0..999 do if (i % 3 = 0) || (i % 5 = 0) then n <- i +

我是计算机科学一年级的学生,之前没有编程方面的知识。有人建议我去解决这些问题,并设法(几乎)解决了这些问题

它指出,您必须对所有数字求和,这些数字是3或5(或两者)的倍数

我在F#中的代码:

设可变n=0
因为我在0..1000做
如果(i%3=0)|(i%5=0),则

n发布此问题的答案,以便于其他人从错误中吸取教训

let mutable n = 0
for i in 0..999 do
  if (i % 3 = 0) || (i % 5 = 0) then
    n <- i + n

printfn "%A" n
设可变n=0
因为我在0..999做什么
如果(i%3=0)|(i%5=0),则

n提示:真正的答案是233168,它的值是1000,而不是100。提示2:“找出1000以下所有3或5的倍数之和。”如果您尝试在F#中求解Project Euler或Project Rosalind,那么尝试编写更多惯用代码会有所帮助。例如,
[1..999]|>Seq.filter(fun x->x%3=0 | | x%5=0)|>Seq.sum
\\我强烈建议您学会在不使用
可变
的情况下进行功能编码。使用
mutable
是朝着错误的方向迈出了一步。当您第一次学习时,我想说使用
mutable
使代码按预期工作是很好的,然后重写代码,使其不使用
mutable
。当编写没有
mutable
的代码时,你可以走重构的道路,但我建议你采取改变你对程序功能的看法的方法,只考虑内存的堆栈,不要考虑堆内存。你应该做好堆栈溢出。你的问题有特定的标题,你解释你所知道的,解释问题,给出代码的例子,陈述你的问题,不要漫无边际,并且乐于接受反馈。要是这里所有的新人都是这样就好了。:)JJJ的提示是,您应该注意
低于1000
,s952163的评论使用
[1…999]
而不是
[1…1000]
,JJJ还指出,您的答案在
1000
之前关闭,如果您在
1000
之前停止,您的答案将减少
1000
。这就是我要开始的地方。这是真的,我已经忘记了!为了证实这一点,我对你的答案投了赞成票!
let mutable n = 0
for i in 0..999 do
  if (i % 3 = 0) || (i % 5 = 0) then
    n <- i + n

printfn "%A" n