我在黑客等级https://www.hackerrank.com/challenges/mini-max-sum/problem
上解决了这个问题它的要求:打印两个空格分隔的长整数,表示各自的最小值和最大值,可以通过对五个整数中的四个进行求和来计算。 (输出可以大于32位整数。)
如果我在下面的代码中进行字符串插值,它会给我一个错误:你的代码没有通过这个测试用例。我知道我不能在一个put / p行中使用多个变量。
array = gets.split(" ")
def get_max_and_min_sum(input_array)
return "0 0" if input_array.size < 1
input_array = input_array.map{|i| i.to_i}
input_array = input_array.sort
return "#{sum(input_array[0..3])} #{sum(input_array[1..4])}"
end
def sum(array)
return array.inject(0){|sum,i| sum+=i}
end
p get_max_and_min_sum(array)
我的问题是如何在由一个空格分隔的一行中打印多个整数。 我想打印10 14而不是“10 14”
答案 0 :(得分:3)
您的问题不在字符串插值中,而是在用于将结果打印到stdout的方法中。您应该使用print
或puts
代替p
,因为print
和puts
调用to_s
只会转换为字符串,而{{1} } p
调用显示更多信息(比如引号表示它是一个字符串,在其他情况下表示隐藏字符之类的东西),对调试更有用。
至于inspect
和print
之间的区别 - puts
只是在结尾处插入换行符,而puts
则没有,并准确打印您提供的内容。
答案 1 :(得分:1)
问题在于p
和print
:
irb(main):003:0> p "1 2"
"1 2"
irb(main):005:0> print "1 2"
1 2
使用打印,你的问题应该解决
答案 2 :(得分:1)
鉴于
str = "21 4 8 13 11"
计算
arr = str.split.map(&:to_i)
#=> [21, 4, 8, 13, 11]
smallest, largest = arr.minmax
#=> [4, 21]
tot = arr.sum
#=> 57
print "%d %d" % [tot-largest, tot-smallest]
36 53
如果要打印回车符,请在最后一行将print
更改为puts
。