Как рассчитать введенные пользователем данные из цикла for - PullRequest
1 голос
/ 29 сентября 2019
numbers = [1, 2, 3, 4, 5]

for num in numbers

  puts "insert q "
  qanswer1 = gets.chomp.to_i

  puts "insert 2nd q"
  qanswer2 = gets.chomp.to_i

end

Этот код будет повторять вопросы 5 раз.Как получить введенные пользователем данные?Я пытаюсь рассчитать общую сумму всех 10 ответов и индекс, в котором сумма каждой пары была самой высокой.

Ответы [ 3 ]

0 голосов
/ 29 сентября 2019
nbr_pairs = 5

def ask(str)
  print "#{str}: "
  gets.to_i
end

arr = nbr_pairs.times.map { [ask("insert q"), ask("insert 2nd q")] }
  #=> [[7, 3], [8, 6], [2, 9], [4, 6], [8, 3]]

Сумма всех 10 ответов

arr.flatten.sum
  #=> 56

Индекс наибольшей суммы пар

nbr_pairs.times.max_by { |i| arr[i].sum }
  #=> 1 (8+6 = 14)

См. Целое число # раз , Массив # flatten , Enumerable # max_by и Array # sum .

0 голосов
/ 29 сентября 2019

Если вам не нужно хранить все данные, вы можете просто выполнить вычисления на лету.

Сначала переместите входной запрос в метод, который возвращает пару значений n в массиве:

def ask
  puts "insert q "
  qanswer1 = gets.to_i
  puts "insert 2nd q"
  qanswer2 = gets.to_i
  [qanswer1, qanswer2]
end

Затем установите переменные

big_sum = 0
best_input = 0
best_input_q_number = nil

Наконец, цикл, как вы делали математику:

numbers = [1,2,3,4,5]

for n in numbers
# (1..5).each do |n| # this is more Ruby-ish
  p qanswers = ask # p for debug
  qanswers_sum = qanswers.sum
  big_sum += qanswers_sum
  if qanswers_sum > best_input
    best_input = qanswers_sum # or qanswers if you want to keep the pairs
    best_input_q_number = n
  end
end
0 голосов
/ 29 сентября 2019

Я пытался найти решение, максимально приближенное к вашему, при этом получая желаемые результаты:

numbers = [0,1,2,3,4]

pairs = Array.new(numbers.size, [])

numbers.each do |number|
  pairs[number] = []

  puts "q 1:"
  pairs[number] << gets.to_i

  puts "q 2:"
  pairs[number] << gets.to_i
end

Чтобы получить пару с максимальным значением:

max_value = pairs.max_by(&:sum)

Комуполучить сумму всех пар:

sum_of_all_responses = pairs.flatten.sum

Чтобы получить индекс пары с наибольшим значением:

pairs.index(max_value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...