【发布时间】:2020-09-17 08:32:09
【问题描述】:
已经在这个 Kata 上工作了很长一段时间,但仍然无法弄清楚我缺少什么。问题是给定两个整数 a 和 b,可以是正数或负数,找到包括它们之间的所有数字的总和并返回它。如果两个数相等,则返回 a 或 b。
到目前为止,这是我的解决方案的样子:
def get_sum(a,b)
sum = [a+=b].sum
if sum == a or b
return a
end
end
这是输出结果:
Test Passed: Value == 1
Test Passed: Value == 3
Expected: 14, instead got: 4
Expected: 127759, instead got: 509
Expected: 44178, instead got: 444
我相信关键字是之间的所有数字,但我不确定如何在语法上编写它。 为了进一步说明,我在下面提供了一些示例。
get_sum(1, 0) == 1 # 1 + 0 = 1
get_sum(1, 2) == 3 # 1 + 2 = 3
get_sum(0, 1) == 1 # 0 + 1 = 1
get_sum(1, 1) == 1 # 1 Since both are same
get_sum(-1, 0) == -1 # -1 + 0 = -1
get_sum(-1, 2) == 2 # -1 + 0 + 1 + 2 = 2
https://www.codewars.com/kata/55f2b110f61eb01779000053/train/ruby
【问题讨论】:
-
你能给出原始问题的链接吗?
-
return sum在哪里? -
我对 ruby 不熟悉,但我在你的代码中至少看到了三个非常可疑的地方。 1) 为什么会有
a+=b? “包括它们在内的 a 和 b 之间的所有数字”表示a + a+1 + a+2 + a+3 + ... + b。该列表中没有a+b。例如,如果a=100, b=120,那么a+b=220没有帮助。 2)if sum == a or b。从ruby-doc.org/core-2.6.2/doc/syntax/precedence_rdoc.html 来看,这意味着“如果 sum == a,或者如果 b 为真”。你打算用这个测试做什么?我认为在 ruby 中,除了false和nil之外,一切都是真的,所以b总是正确的。 -
3) 在某些情况下,您会返回
a。在其他情况下,您不会返回任何东西。看起来你永远不会返回一笔款项。 -
最后,知道对于任何非负的
n,1+2+...+n = n*(n+1)/2,我们得到:a + a+1 + a+2 + ... + b = a + a+1 + a+2 + ... + a+(b-a) = (b-a+1)*a + 1+2+...+(b-a) = (b-a+1)*a + (b-a)*(b-a+1)/2 = (b-a+1)*(a+(b-a)/2) = (b-a+1)*(a+b)/2,所以你可以写def get_sum(a,b) return (b-a+1)*(a+b)/2