DMOJ COCI'17 Contest1 #1 Cezar题代码样例通过提交失败求助
问题排查结果
- 边界异常:未处理
x不在ranks数组范围的场景,当x < 2或者x > 11时,ranks.index(x)会直接抛出ValueError导致程序运行崩溃,这是提交评测失败的核心原因。 - 逻辑遗漏:牌值刚好等于
x的情况完全没有被统计,抽到这类牌刚好凑够21点属于安全不爆的情况,应该计入安全牌总数。
修正后的代码
suits = [4, 4, 4, 4, 4, 4, 4, 4, 16, 4] ranks = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] x = 21 drawn = int(input()) for i in range(drawn): card = int(input()) left = ranks.index(card) suits[left] -= 1 x -= card # 先处理边界情况 if x > 11: # 所有剩余牌点数都<=11,抽了不会爆 print('VUCI') elif x < 2: # 所有剩余牌点数都>=2,抽了必爆 print('DOSTA') else: idx = ranks.index(x) # 安全牌:点数<=x的所有剩余牌,包含等于x的情况 total_safe = sum(suits[:idx+1]) # 爆牌:点数>x的剩余牌 total_bust = sum(suits[idx+1:]) if total_bust >= total_safe: print('DOSTA') else: print('VUCI')
内容的提问来源于stack exchange,提问作者ammiko
相关产品推荐
相关产品推荐

