我正在尝试为Project Euler中的问题6编写Rubyish解决方案,因为我倾向于在其他语言中编写C语言。但是,这段代码:
sqrsum, sumsqr = 0, 0
(1..100).each { |x| sqrsum, sumsqr += x, x**2 }
p (sumsqr - (sqrsum ** 2))
解决了这些错误:
/Users/Andy/Documents/Programming/Ruby/ProjectEuler/P6.rb:2: syntax error, unexpected tOP_ASGN, expecting '='
(1..100).each { |x| sqrsum, sumsqr += x, x**2 }
^
/Users/Andy/Documents/Programming/Ruby/ProjectEuler/P6.rb:2: syntax error, unexpected tPOW, expecting '='
(1..100).each { |x| sqrsum, sumsqr += x, x**2 }
^
我在这里做错了什么?我只允许分配那个句法结构吗?
答案 0 :(得分:3)
您正尝试进行多项分配,但未使用分配运算符=
。
将sqrsum, sumsqr = 0, 0
与sqrsum, sumsqr += x, x**2
进行比较。
可能你想写sqrsum, sumsqr = sqrsum+x, sumsqr+x**2
。
答案 1 :(得分:2)
为什么不做{ |x| sqrsum += x; sumsqr += x**2}
答案 2 :(得分:2)
你也可以使用inject
sqrsum, sumsqr = (1..100).inject(:+), (1..100).inject(0) { |result,x| result + x**2 }
p(sumsqr - sqrsum**2)
[编辑:感谢评论者指出:+速记]
答案 3 :(得分:1)
你想要吗
sqrsum,sumsqr = sumsqr + x,x ** 2