我在黑客级别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”
您的问题不在字符串插值中,而是在用于将结果打印到stdout的方法中。您应该使用print
或puts
而不是p
,因为print
和puts
调用to_s
,它只是转换为字符串,而p
调用inspect
,它会显示更多信息(如引号表示它是一个字符串,在其他情况下像隐藏字符的东西)并且对调试更有用。
至于print
和puts
之间的区别 - puts
只是在最后插入一个换行符,而print
没有,并打印出你给它的确切内容。
问题是p
和print
之间的区别:
irb(main):003:0> p "1 2"
"1 2"
irb(main):005:0> print "1 2"
1 2
使用打印,你的问题应该解决
特定
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
。