Использование языка Ruby имеет функцию ArrayAdditionI (arr), которая принимает массив чисел, хранящихся в arr, и возвращает строку true, если любая комбинация чисел в массиве может быть добавлена до равного наибольшему числу в массиве, иначе верните строку false. Например: если arr содержит [4, 6, 23, 10, 1, 3], вывод должен возвращать true, потому что 4 + 6 + 10 + 3 = 23. Массив не будет пустым, не будет содержать все те же элементы, и могут содержать отрицательные числа.Array Дополнение, зачем начинать с «i = 2»?
Может кто-нибудь объяснить мне, почему этот код начинается с «i = 2», а не «i = 0»?
def ArrayAdditionI(arr)
i = 2
while i < arr.length
return true if arr.combination(i).map{|comb| comb.inject(:+)}.include?(arr.max)
i += 1
end
false
end
ArrayAdditionI(STDIN.gets)
Поправьте меня, если я ошибаюсь, но с = 2, то цикл в то время как будет перебирать [2..4], а затем остановиться. Но позволяет ли это использовать все потенциальные комбинации? ... => работает код, поэтому, очевидно, это происходит, но я просто не вижу его.
'i' используется как аргумент для' комбинация (i) '. Я предлагаю прочитать документы о [комбинационном методе] (http://ruby-doc.org/core-2.2.0/Array.html#method-i-combination). Какие комбинации, по вашему мнению, могут быть упущены этим методом/циклом? – spickermann
Спасибо @spickermann, но я спросил, зачем начинать с «2» ... не то, что «я»? – Zarley
'i' начинается с' 2' **, потому что ** это не индекс, он используется в 'arr.combination (i)'. Попробуйте 'arr.combination (0) .to_a' и' arr.combination (1) .to_a' и посмотрите, каков результат. –