小 F 的寻找字符任务 | 豆包MarsCode AI刷题

66 阅读3分钟

一、题目理解

在这道题目中,小 F 和他的朋友们围成一个圈,每个人背上贴着字母 A 或者 B。从第一个人开始计数,每遇到一个贴着字母 A 的人就计数一次,当计数到第 k 个 A 时,任务结束。我们需要帮助小 F 计算总共需要数多少个人才能在第 k 次遇到 A 后停止,并且保证至少有一个人背上是 A。

关键要点

  1. 循环计数:因为朋友们是围成一个圈,所以计数过程是循环的。当数到最后一个人后,会重新从第一个人开始数。
  2. 条件判断:判断当前数到的人背上的字母是否为 A,若是则计数变量(遇到 A 的数量)加 1。
  3. 结束条件:当遇到 A 的数量达到 k 时,停止计数,并返回总共数过的人数。

二、解题思路

  1. 初始化变量

    • 我们需要两个变量,一个是count_a用来记录已经数到的 A 的数量,初始化为 0。另一个是count_people用来记录总共数过的人数,初始化为 0。
  2. 循环计数过程

    • 我们使用一个while循环,循环条件是count_a < k,也就是还没有数到第 k 个 A。
    • 在循环内部,我们需要判断当前数到的人背上的字母是否为 A。由于是循环计数,我们通过count_people % len(people)来获取当前要判断的人的位置。这里len(people)是字符串people(代表朋友们背上的字母序列)的长度,count_people % len(people)可以保证我们在循环遍历字符串时不会越界。
    • 如果people[count_people % len(people)] == 'A',也就是当前数到的人背上是 A,那么count_a就加 1。
    • 不管当前数到的人背上是 A 还是 B,count_people都要加 1,因为我们数过了一个人。
  3. 返回结果

    • count_a达到 k 时,循环结束,此时count_people的值就是我们总共数过的人数,将其返回。

三、代码分析

def solution(n: int, k: int, people: str) -> int:
    count_a = 0
    count_people = 0
    while count_a < k:
        if people[count_people % len(people)] == 'A':
            count_a += 1
        count_people += 1
    return count_people
  1. 函数定义

    • solution函数接受三个参数,n(朋友的数量,虽然在代码中未使用,但在题目描述中有提及),k(要数到的 A 的数量)和people(代表朋友们背上的字母序列的字符串),并返回一个整数(总共数过的人数)。
  2. 变量初始化

    • count_a = 0count_people = 0分别初始化了记录 A 的数量和数过的人数的变量。
  3. 循环体

    • while循环中,首先通过if people[count_people % len(people)] == 'A':判断当前位置的字母是否为 A。如果是,count_a加 1。然后count_people加 1,进行下一次计数。
  4. 返回值

    • count_a达到 k 时,循环结束,函数返回count_people