这道题目要求我们根据乒乓球比赛的得分记录,分别计算11分制和21分制下的比赛结果。我们需要处理输入的字符串,忽略'E'之后的内容,然后分别模拟两种赛制下的比赛过程。 方法思路 1. 输入处理:读取所有输入行,直到遇到字符'E'为止,将所有有效的'W'和'L'字符拼接成一个字符串。 2. 模拟比赛过程:分别处理11分制和21分制: - 11分制:每局比赛先达到11分且领先至少2分的选手赢得该局。如果比分达到10:10,则需要继续比赛直到一方领先2分。 - 21分制:规则类似,但每局需要达到21分且领先至少2分。 3. 输出结果:每局比赛结束后,立即记录比分,并开始下一局。所有比分按顺序输出,11分制和21分制的结果之间用空行分隔。 解决代码 ```python def process_game(scores, rule): a = 0 b = 0 results = [] for c in scores: if c == 'W': a += 1 elif c == 'L': b += 1 # Check if the game ends according to the rule if (a >= rule or b >= rule) and abs(a - b) >= 2: results.append(f"{a}:{b}") a, b = 0, 0 # After loop, handle remaining scores that didn't complete a game if a != 0 or b != 0: results.append(f"{a}:{b}") return results def main(): import sys data = [] for line in sys.stdin: if 'E' in line: data.append(line[:line.index('E')]) break data.append(line.strip()) scores = ''.join(data) # Process 11-point rule results_11 = process_game(scores, 11) # Process 21-point rule results_21 = process_game(scores, 21) # Output results for res in results_11: print(res) print() for res in results_21: print(res) if __name__ == "__main__": main() ``` 代码解释 1. process_game函数:处理比赛得分字符串,根据给定的赛制规则(11分或21分)模拟比赛过程。每次得分后检查是否满足结束条件(达到规定分数且领先至少2分),满足则记录比分并重置当前比分。 2. main函数:读取输入数据,拼接有效字符(忽略'E'之后的字符),分别调用process_game处理11分制和21分制,输出结果。两部分结果之间用空行分隔。 3. 输入处理:使用sys.stdin读取所有行,遇到'E'时停止,并截取有效部分。 4. 输出处理:遍历两种赛制的结果列表,逐行输出比分。 这种方法确保正确解析输入数据,并根据不同赛制规则准确模拟比赛过程,输出符合要求的比分结果。 [2025-04-28 18:19:45 | AI问答 | 675点数解答]