Ruby 在一行中打印两个整数而不使用字符串插值

Ruby Print two integers in one line without using string interpolations

我正在黑客等级上解决这个问题https://www.hackerrank.com/challenges/mini-max-sum/problem

它的要求:打印两个 space 分隔的长整数,分别表示可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。 (输出可以大于32位整数。)

如果我在下面的代码中进行字符串插值,它会给我一个错误:你的代码没有通过这个测试用例。我知道我不能在单个 puts/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)

我的问题是如何在一行中打印多个整数,中间用一个 space 分隔。 我想打印 10 14 而不是 "10 14"

问题是 pprint 之间的区别:

irb(main):003:0> p "1 2"
"1 2"

irb(main):005:0> print "1 2"
1 2

使用 print 应该可以解决你的问题

您的问题不在于字符串插值,而在于您将结果打印到标准输出的方法。您应该使用 printputs 而不是 p 因为 printputs 调用 to_s 只是转换为字符串,而 p 调用 inspect 显示更多信息(比如引号表明它是一个字符串,在其他情况下是隐藏字符之类的东西)并且对调试更有用。

至于 printputs 之间的区别 - puts 只是在末尾插入一个换行符,而 print 则不会,并且会准确打印您提供的内容。

给出

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

如果要打印回车 return,则将最后一行的 print 更改为 puts