创建一个名为“Sum_plus_one”的方法,该方法接受包含整数的数组参数。在为每个数组添加一个整数之后,Themethod应该返回数组中整数的总和。
例如: sum_plus_one([1,2,3])
结果应为:9
我的代码看起来像这样
def sum_plus_one(*nums)
for num in nums
num + 1
end
total = 0
for num in nums
total += num
end
return total
end
答案 0 :(得分:5)
为什么不预先做一点数学运算,看看对数组元素加一的求和与求和元素然后加上数组长度相同?例如:
(5+1) + (6+1) + (11+1) = 5 + 6 + 11 + (1 + 1 + 1)
= 5 + 6 + 11 + 3
这给你一些美好而简单的东西:
array.inject(:+) + array.length
答案 1 :(得分:1)
[105] pry(main)> arr
=> [1, 2, 3]
[106] pry(main)> arr.inject(0) { |var, i| var + i + 1 }
=> 9
所以方法看起来像
def sum_plus_one(*nums)
nums.inject(0) { |var, num| var + num + 1 }
end
答案 2 :(得分:1)
功能样式版
[1, 2, 3].reduce(0) {|acc, n| acc + n + 1}
答案 3 :(得分:1)
map / reduce在这里很方便:
def sum_plus_one(nums)
nums.map(&:succ).reduce(:+)
end
编辑:
这是使代码有效的一种方法:
def sum_plus_one(nums)
nums.map! do |num|
num + 1
end
total = 0
for num in nums
total += num
end
return total
end
答案 4 :(得分:0)
您的问题是您需要将num + 1
值分配给您在第一个循环中枚举的数组的相应元素。
可能是这样的:
for i in (0...nums.count)
nums[i] += 1
end
之后你的程序应该工作
(是的,您可以使用花哨的库或构造而不是上面的循环)
请注意,您可以取消顶部循环,只需在第二个循环中将num + 1
添加到total
。