我正在研究this hackerrank challenge。
我想尝试使用ruby的问题,这是我写的代码:
gets.to_i.times do
num_people = gets.to_i
num_people_factorial = (1..num_people).inject(:*) || 1
numerator = num_people_factorial
if num_people > 2
denominator = 2*((1..num_people - 2).inject(:*) || 1)
elsif num_people == 2
denominator = 2
else
denominator = 10000
end
puts numerator / denominator
end
问题是,当我在计算机上运行它时,我得到了正确的答案,但是当我通过Hackerrank的系统运行它时,测试用例超时 - 它们的执行速度不够快,无法进行评分。
如何优化此代码?
编辑:当我提交此代码时,我看到了这个结果:
答案 0 :(得分:4)
你必须保持警惕以避免可怕的"XY" question!从标题中你可以假设你需要计算一个阶乘。为什么?你过分思考。问题是房间里是否有N人,将会发生多少次握手。 N人中的每一个人都与(N-1)人握手,但每次握手都算两次,所以答案是:
N*(N-1)/2
我无法确定,但我希望这会通过基准测试。
由于您可以快速轻松地计算出这个数字,即使没有电脑,计算器甚至纸和笔,您现在还有另一种方式可以在晚宴上给其他客人留下深刻的印象。