保龄球游戏题解:一次简单高效的模拟实现与优化分析
在刷题过程中,我们常常会遇到一些看似简单却细节丰富的模拟题,比如今天要聊的这道保龄球题。它不仅考察基本的逻辑判断,还需要对“状态记忆”有一个清晰的掌握。本文将从题目理解、基础实现到高效优化方案,逐步带你吃透这道题。
🎯 题目描述
有两个玩家进行保龄球比赛。比赛一共进行 n
轮,每轮玩家击中的瓶数保存在两个数组 player1
和 player2
中,对应每一轮的得分。
每轮基础得分是击倒的瓶数 x
,但如果 玩家在前两轮的任何一轮中击中了 10 个瓶子(即打出 strike),那么当前轮的得分为 2 * x
,即加倍。
比赛结束后:
- 如果玩家1的总分高于玩家2,返回 1;
- 如果玩家2更高,返回 2;
- 平局返回 0。
🧠 初步解法:显式回顾历史状态
我们可以从最直观的实现方式入手:每轮检查玩家在前两轮中是否打出10分,然后决定当前分数是否加倍。
def is_doub