AI刷题-T129 小E的比赛得分计算 题解 | 豆包MarsCode AI刷题

95 阅读2分钟

2024-11-24 16:55

题目分析:

本题描述了小E参加一系列共 n 场比赛的情况,赢得一场比赛可得 1 分,若连续赢得两场或更多比赛,从第二场开始每多赢一场额外再得 1 分。需要根据给定的 n 场比赛结果数组 a(其中 1 表示赢,0 表示输)来计算小E最终能获得的总分数。关键在于准确判断连续获胜的场次,以便正确计算额外得分。

题解思路:

1. 变量初始化

  • solution 方法中,首先定义了两个变量:
    • totalScore:用于累计小E的总分数,初始化为 0。这个变量会随着对每场比赛结果的处理而不断更新,最终存储的就是小E在所有比赛结束后的总得分。
    • consecutiveWins:用于记录小E连续获胜的场次,初始化为 0。每当小E赢得一场比赛,这个变量就会增加 1,当小E输掉一场比赛时,这个变量就会重置为 0

2. 遍历比赛结果数组

  • 使用 for 循环遍历给定的比赛结果数组 a,循环变量 i0n - 1,依次处理每一场比赛的结果。

3. 根据比赛结果更新分数和连续获胜场次

  • 对于每场比赛结果 a[i]
    • 如果 a[i] == 1,表示小E赢得了这场比赛:
      • 首先,将 totalScore 增加 1,因为赢得一场比赛至少能得 1 分。
      • 然后,将 consecutiveWins 增加 1,表示连续获胜的场次增加了一场。
      • 接着,判断 consecutiveWins 是否大于等于 2。如果是,说明小E已经连续赢得了两场或更多比赛,此时需要再给 totalScore 增加 1 分,以计算额外的得分。
    • 如果 a[i] == 0,表示小E输掉了这场比赛,此时将 consecutiveWins 重置为 0,因为连续获胜的场次被中断了。

4. 返回总分数

  • 当循环遍历完整个比赛结果数组 a 后,totalScore 变量中已经累计了小E根据比赛结果和规则所获得的总分数,最后将 totalScore 返回作为本题的最终答案。

代码

    public static int solution(int n, int[] a) {
        int totalScore = 0;
        int consecutiveWins = 0;

        for (int i = 0; i < n; i++) {
            if (a[i] == 1) {
                totalScore++;
                consecutiveWins++;
                if (consecutiveWins >= 2) {
                    totalScore++;
                }
            } else {
                consecutiveWins = 0;
            }
        }

        return totalScore;
    }