0

配列内の 2 つの整数の合計が n に等しいかどうかを確認しようとしています。ただし、最初のケースでは偽になりますが、真になるべきだと思います。

def sum_to_n?(array, n)
  for i in array
    s = n - i
    return true if array.include? s
    return false if i != n - i
  end
end

puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)
4

5 に答える 5

3

それほど多くの行でこれを行うことができません:-)

ary = [1,2,3,4,5]
n=9
ary.combination(2).detect { |a, b| a + b == n }
于 2013-10-06T20:11:01.237 に答える
0
s = n - i # => 8, 11

sそれはあなたが思っているものではありません。

最初のケースでは、1 から 5 までの要素で指定した配列に 8 または 11 が含まれていると信じているため、false になります。これは、6 や 3 などを指定した場合に機能します。

于 2013-10-06T20:10:16.493 に答える
0

私はもっ​​と運が良かった.combination.any?

return array.combination(2).any? {|a, b| a + b == n}

これは、何かが合計される場合は true を返し、そうでない場合は false を返します。ただし、空の配列を処理するには、さらに多くのものが必要になります。

于 2013-10-08T18:09:39.743 に答える
0

最初のループですぐにfalse戻るため、常に戻ります。false正しいのは次のとおりです。

def sum_to_n?(array, n)
  for number in array
    return true if array.include?(n - number)
  end

  false
end

一致が見つからずにループが終了した場合は、明示的に false が返されます。

于 2013-10-06T20:12:10.793 に答える