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。
上一题
下一题