-1

配列内のすべての整数要素を見つける必要があり、その合計は配列内の整数要素の 1 つに等しくなります。

たとえば、入力として次のような配列があるとします。 [1, 2, 4, 10, 90, 302, 312, 500]

次に、出力には、他の要素の合計である整数要素を含むすべての整数要素が含まれている必要があります。[10, 302, 312]次のようになります。10+302 = 312

これは私がルビーで試したことです:

numbers = [1, 2, 4, 10, 90, 302, 312, 500]
numbers.each_with_index do |number, index|
  target = []
  return [] if numbers.size < 3
  target << number
  puts "target in numbers.each: #{target.inspect}"
  0.upto(numbers.size).each do |i|
    puts "target in (index+1).upto: #{target.inspect}"
    target << numbers[i] unless index == i
    next if target.size < 2
    break if target.inject(&:+) > numbers.max
    puts "== array starts =="
    puts [target, target.inject(&:+)].flatten.inspect if numbers.include? target.inject(&:+)
    puts "== array ends =="
  end
end

しかし、それは期待される出力を行っていません。これで運が良ければ更新します。それまで、私がここで間違っていることを誰かが指摘できますか? ありがとう。

アルゴリズムも私に適しています。

4

2 に答える 2

1

実装:

arr = [1, 2, 4, 10, 90, 302, 312, 500]

(2..arr.count).each do |len|
  arr.combination(len).each do |comb|
    sum = comb.inject(:+)
    if arr.include? sum
      puts (comb << sum).inspect
    end
  end
end
于 2013-09-19T08:36:18.007 に答える