このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
ニックは宝くじを買うのが好きである。くじを1つ買う費用はpriceである。ニックはb1~b4までの紙幣を持っている(一緒の値になることもある)。ニックはおつりなしでくじを買えるかどうかを知りたがっている。言い換えれば、持っている紙幣の一部だけを使ってきっちりpriceを支払いたいということである。もし可能であれば"POSSIBLE"を、そうでなければ"IMPOSSIBLE"を返せ。
私の解答はこちら。
public class LotteryTicket { public String buy(int price, int b1, int b2, int b3, int b4) { int total = 0; for( int i=0 ; i<2 ; i++ ){ for( int j=0 ; j<2 ; j++ ){ for( int k=0 ; k<2 ; k++ ){ for( int l=0 ; l<2 ; l++ ){ total = 0; if( i == 1 ) total += b1; if( j == 1 ) total += b2; if( k == 1 ) total += b3; if( l == 1 ) total += b4; if( total == price ) return "POSSIBLE"; } } } } return "IMPOSSIBLE"; } }
得点は244.99/250、1回のsubmitでシステムテストクリア。単純に全部のパターンを試すだけです。すべてのパターンを生成する方法は、本問のように4重ループ程度なら良いですが、100重ループとかになったら考えものでしょうね。
0 件のコメント:
コメントを投稿