この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 件のコメント:
コメントを投稿