查找数字总和为Ruby中最大数字的电话号码

时间:2015-05-19 19:02:30

标签: ruby-on-rails ruby

这是我第一次使用Ruby,我需要使用一个包含三个10位数电话号码的数组,并让程序给我一个总和最大的电话号码。

my_array =(['123-456-7777','963-481-7945','111-222-3333'])

=> '963-481-7945'

我不知道从哪里开始。

请帮忙!

我目前正在使用Ruby进行codeacademy课程。但到目前为止,我还不太了解这个问题。

我想过要开始 my_array =(['123-456-7777','963-481-7945','111-222-3333']) my_array [2]

这会给我想要的答案 => “963-481-7945”

但我知道这不是要走的路。

我在考虑为每个值执行求和,然后将其设置为我想要显示的数字集,但我不确定如何设置它。

2 个答案:

答案 0 :(得分:0)

解决方案是这样的:

my_array = (['123-456-7777', '963-481-7945', '111-222-3333'])
highest_sum = 0
highest_phone_number = 0

my_array.each do |phone_number|
    sum = phone_number.gsub('-', '').split('').map(&:to_i).reduce(&:+)
    if sum > highest_sum
        highest_sum = sum
        highest_phone_number = phone_number
    end
end

puts highest_phone_number
#=> 963-481-7945

您查看电话号码字符串(my_array)中的每个字符串,并获取每个电话号码字符串的总和。您可以通过将短划线(' - ')替换为任何内容(''),将电话号码字符串拆分为数字,将每个数字映射为整数,然后对数字。获得电话号码的总和后,检查它是否大于当前的最高音量。如果是,请将highest_sum设置为该总和,将highest_phone_number设置为当前电话号码。在您通过所有电话号码字符串循环后,只输出highest_phone_number。

答案 1 :(得分:0)

这是我的解决方案:

my_array = (['123-456-7777', '963-481-7945', '111-222-3333', '222-111-3333'])

sum_arr  = []
sum_hash = {}

my_array.each do |s|
  sum = s.gsub("-","").split(//).inject(0) {|z, x| z + x.to_i}
  puts sum
  sum_hash[sum] = sum_hash[sum] ? sum_hash[sum] << s : [s]
  puts sum_hash.inspect
end

puts sum_hash.max_by { |k,v| k }

我的部分解决方案来自:http://rosettacode.org/wiki/Sum_digits_of_an_integer

注意:在我写答案的过程中,问题发生了变化:(