Генерация последовательности в Ruby - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу взять целое число у пользователя и сгенерировать последовательность из пяти чисел, начиная с заданного целого числа и умножая каждое предыдущее число на четыре, используя итерацию.Например, если я введу 2, список должен быть [2, 8, 32, 128, 512].

n = gets
i = 0
while i < 4
  n = n * 4
  p n
  i = i + 1
end

Ответы [ 3 ]

0 голосов
/ 09 декабря 2018

Я не уверен, хотите ли вы создать массив чисел для последующего использования или просто хотите повторить.В дальнейшем вы можете заменить «памятки» на что угодно, «памятка» будет содержать значение, которое вы ищете для каждого прохода.

s = 2 
(s...(s+5)).reduce(s) do |memo, i| 
    puts memo
    memo = memo * 4 
end
0 голосов
/ 10 декабря 2018

Прогон:

(5 - 1).times.with_object([gets.to_i]){|i, a| a.push(a.last * 4)}

Ввод:

2

Возвращаемое значение:

[2, 8, 32, 128, 512]
0 голосов
/ 09 декабря 2018

Есть много способов выполнить то, что вы описываете.У вас уже есть некоторые реализации в комментариях и в другом ответе @ Abhimanyu.

Проблема, с которой я столкнулся, состоит в том, чтобы итерировать значение для последовательности.Я продолжаю получать его как [2,2,2,2,2]

Ваш пример кода не будет работать, потому что Kernel#gets не возвращает число, ноString, за которым следует символ новой строки (поскольку он использует разделитель по умолчанию из глобальной переменной $/, которая, как представляется, "\n"):

[1] pry(main)> gets
2
=> "2\n"
[2] pry(main)> gets.class
2
=> String

Для исправления своего фрагмента вынеобходимо добавить .chomp.to_i, чтобы удалить символ новой строки и преобразовать его в целое число:

def generate_sequence
  n = gets.chomp.to_i
  i = 0
  while i < 4
    n = n * 4
    p n
    i = i + 1
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...