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

问题描述 投票:0回答:3

我在黑客级别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”

enter image description here

ruby algorithm printing puts
3个回答
3
投票

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

至于printputs之间的区别 - puts只是在最后插入一个换行符,而print没有,并打印出你给它的确切内容。


1
投票

问题是pprint之间的区别:

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

irb(main):005:0> print "1 2"
1 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

© www.soinside.com 2019 - 2024. All rights reserved.