2013年4月14日日曜日

TopCoder SRM466 Div2 250Pts

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

コメントを投稿

フォロワー

ページビューの合計