2660. 保龄球游戏的获胜者

给你两个下标从 0 开始的整数数组 player1 和 player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。

保龄球比赛由 n 轮组成,每轮的瓶数恰好为 10 。

假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为:

  • 如果玩家在该轮的前两轮的任何一轮中击中了 10 个瓶子,则为 2xi 。
  • 否则,为 xi 。

玩家的得分是其 n 轮价值的总和。

返回

  • 如果玩家 1 的得分高于玩家 2 的得分,则为 1 ;
  • 如果玩家 2 的得分高于玩家 1 的得分,则为 2 ;
  • 如果平局,则为 0 。

直接模拟


use std::cmp::Ordering;
 
impl Solution {
    pub fn is_winner(player1: Vec<i32>, player2: Vec<i32>) -> i32 {
        let s1 = Self::score(&player1);
        let s2 = Self::score(&player2);
 
        match s1.cmp(&s2) {
            Ordering::Less => 2,
            Ordering::Greater => 1,
            Ordering::Equal => 0,
        }
    }
 
    fn score(player: &Vec<i32>) -> i32 {
        let mut ans = 0;
        let mut need_more = 0;
 
        player.iter().for_each(|score| {
            if need_more > 0 {
                ans += 2 * *score;
                need_more -= 1;
            } else {
                ans += *score;
            }
            
            if *score == 10 {
                need_more = 2;
            }
        });
 
        ans
    }
}

#算法/brute_force