私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「【実力判定: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を出力にしなければなりません)。