测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25230. 计算 21 点游戏中手牌的最大总点数(A 可作 1 或 11,J/Q/K 为 10)。若无论如何超过 21 点则输出 0。输入描述:输入字符串 S(仅含牌面字符,长度 2~11,相同牌不超过 4 张)。输出描述:输出最大总点数(≤21),或 0。样例输入:A3A4样例输出:19

填空题 容易

题目描述

计算 21 点游戏中手牌的最大总点数(A 可作 1 或 11,J/Q/K 为 10)。若无论如何超过 21 点则输出 0。

输入描述:

输入字符串 S(仅含牌面字符,长度 2~11,相同牌不超过 4 张)。

输出描述:

输出最大总点数(≤21),或 0。

样例输入:

A3A4

样例输出:

19

参考答案

s = input( ).strip( ) cards = [] i = 0 while i < len(s): if s[i] == 'A': cards.append('A') i += 1 elif s[i] == '1' and i + 1 < len(s) and s[i + 1] == '0': cards.append('10') i += 2 else: cards.append(s[i]) i += 1 base = 0 a_count = 0 for card in cards: if card == 'A': a_count += 1 elif card in ['J', 'Q', 'K']: base += 10 elif card == '10': base += 10 else: base += int(card) total_min = base + a_count # 所有A作1点 if total_min > 21: print(0) else: x = min(a_count, (21 - total_min) // 10) # 计算A作11点的次数 total = total_min + 10 * x print(total)

答案解析

分离牌面: 遍历字符串,处理 '10'(占 2 字符)和其他牌(占 1 字符)。

计算基础点数:

非 A 牌:2~10 按面值,J/Q/K 为 10。

A 计数暂存。

处理 A:

若所有 A 作 1 点仍超过 21,输出 0。

否则,计算最多可将 k 个 A 从 1 点改为 11 点(每次增加 10 点),且总点数 ≤21。

输出结果: 基础点数 + 10 * k。

上一题 下一题