CodeIQ:【実力判定:Cランク】256

私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「【実力判定:Cランク】256」(CodeIQ)を参照してください。

問題の概要

問題を引用します。
【問題】
いくつかの整数値が与えられます。
それらの中で、和がちょうど256になるような2数が存在するかどうかを調べてください。

【入力】
標準入力から、整数値が与えられます。
1行目は整数値N(2≦N≦100)、2行目はN個の整数値Ak(0≦Ak≦256)が半角スペースで区切られています。

【出力】
和が256になる2数が存在する場合は"yes"、存在しない場合は"no"と、標準出力に出力してください。

【入出力サンプル】
Input
4
32 64 128 192
標準出力
yes

私のプログラム

Rubyで解答しています。

#!/usr/bin/ruby

# main
ln = 0
while line = gets
	line.strip!
	if line.empty? then next end

	if ln == 1 then
		args = line.split.map{|a| a.to_i}
	end

	ln += 1
end

ret = "no"
for i in 0...args.size
	for j in (i+1)...args.size
		if args[i] + args[j] == 256 then
			ret = "yes"
			break
		end
	end
end

puts ret

解説

Cランクの問題なので非常に簡単です。

考え方

2つの値をたし合わせて256になるものを探すのですが、Nは最大100なので総当たりしても100*99通りしかありません。総当たりで計算して256になる値の組を探せば十分です。

コード

コードの解説は不要と思います。
単純に二重のループで足して256になる値を探します。一組でも見つかればyesなので見つかったらループをbreakします。

雑感

よく見たらループのbreakがおかしいです。外側のループを抜けていません。yesを出力して終了すべきでした(同時に最後の行はnoを出力にしなければなりません)。