Problem 2024 : Blackjack
Problem A: Blackjack
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=2024
- 問題概要
ブラックジャックのシミュレーション
カードの山とどういうときカードを引くかの条件が与えられている。
最終スコアを出力せよ。
- 解法
書くだけ。
- ソース
#include<iostream> #include<string> #include<algorithm> #include<vector> #include<map> #include<set> #include<cstdlib> #include<cstdio> #include<cmath> #include<sstream> #include<cassert> #include<queue> #include<stack> #define REP(i,b,n) for(int i=b;i<n;i++) #define rep(i,n) REP(i,0,n) #define ALL(C) (C).begin(),(C).end() #define pb push_back #define mp make_pair #define vint vector<int> #define FOR(it,o) for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it) #define lli long long int #define ld long double using namespace std; main(){ map<char, int> index; REP(i, 2, 10){ index[(char)i + '0'] = i; } index['T'] = index['J'] = index['Q'] = index['K'] = 10; index['A'] = 1; int n; cin >> n; rep(i, n){ int score = 0; bool ace = false; rep(j, 2){ char tmp; cin >> tmp; if(ace ||tmp != 'A')score += index[tmp]; else ace = true; } char card[8]; rep(j, 8)cin >> card[j]; bool bj = true; rep(j, 8){ int tmp = score; bool flag = false; if(ace){ if(tmp <= 10){ tmp += 11; flag = true; } else { tmp++; } } if(flag && tmp == 17){ bj = false; score += index[card[j]]; } else if(tmp <= 16){ bj = false; if(card[j] == 'A' && !ace){ ace = true; } else score += index[card[j]]; } else break; } if(ace){ if(score <= 10){ score += 11; } else score++; } if(bj && score == 21)cout << "blackjack" << endl; else if(score > 21)cout << "bust" << endl; else cout << score << endl; } }