ぱーぽーの競プロ記

競技プログラミングに関することを書きます。

AOJ 2024 Blackjack

問題文はこちら↓
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2024


・概要
ブラックジャック(トランプを用いたゲーム)の点数計算をする問題です。
ブラックジャックのルールについてはwikipediaなどをご覧ください。


・解法
やるだけです。
ただしこの問題、いろいろと納得がいかないです…。(私は8WAくらいました)


ソースコード

#include<iostream>
#include<algorithm>
#include<cctype>
using namespace std;

#define rep(i,n) for(int i = 0 ; i < (int)(n) ; i++)
int card[10];

int main(){
  int N;
  cin >> N;
  while(N--){
    rep(i,10){
      char tmp;
      cin >> tmp;
      if(!isdigit(tmp)){
        if(tmp=='A')card[i] = 1;
        else card[i] = 10;
      }
      else card[i] = (int)(tmp - '0');
    }
    
    bool blackjack = false;
    bool bust = false;
    bool ace = false;
    int sum = 0;
    
    rep(i,10){
      if(sum <= 16 || (sum==17 && ace)){
        if(card[i]==1 && sum+11 <= 21){
	  sum+=11;
	  ace = true;
        }
        else sum+= card[i];
        
        if(sum > 21 && ace){
	  sum -= 10;
	  ace = false;
        }
        
        if(i==1 && sum==21){blackjack = true; break;}
        if(sum > 21){bust = true; break;}
      }
    }
    if(blackjack)cout << "blackjack" << endl; 
    else if(bust)cout << "bust" << endl;
    else cout << sum << endl;  
  }
  return 0;
}