青训营X豆包MarsCode 技术训练营第一课 | 豆包MarsCode AI 刷题

120 阅读3分钟
def solution(n):
    pairings = 0
    while n > 1:
        if n % 2 == 0:
            pairings += n // 2
            n = n // 2
        else:
            pairings += (n - 1) // 2
            n = (n - 1) // 2 + 1
    return pairings
  • 函数签名及初始化

    • 定义了一个名为 solution 的函数,它接受一个参数 n,这里没有显式给出参数的类型提示,但从代码后续的操作可以推测 n 应该是一个整数类型(在 Python 中虽然不强制要求,但这样的代码风格更清晰明确)。
    • 在函数内部,首先初始化了一个变量 pairings 为 0,这个变量将用于累计某种配对的数量,具体含义取决于代码所解决问题的上下文(从代码本身暂不太明确具体业务场景下的 “配对” 含义)。
  • 循环逻辑

    • 接着进入一个 while 循环,循环条件是 n > 1,意味着只要 n 的值大于 1,循环就会继续执行。

    • 偶数情况处理

      • 在循环内部,首先通过 if n % 2 == 0 判断 n 是否为偶数。如果 n 是偶数,那么执行以下操作:

        • pairings += n // 2:将 n 除以 2 的整数商累加到 pairings 变量中。这里的 // 是 Python 中的地板除运算符,它会返回除法运算的整数部分。例如,如果 n 是 10,那么 10 // 2 等于 5,就会把 5 加到 pairings 上。
        • n = n // 2:然后将 n 的值更新为它自身除以 2 的结果(同样是取整数部分)。继续以上面 n 为 10 的例子,此时 n 就会被更新为 5,以便在下一次循环中继续进行相关计算。
    • 奇数情况处理

      • 如果 n 不是偶数(即奇数),通过 else 分支来处理。执行以下操作:

        • pairings += (n - 1) // 2:先将 n 减 1,然后再除以 2 取整数商,并将这个结果累加到 pairings 变量中。例如,如果 n 是 7,那么 (7 - 1) // 2 等于 3,就会把 3 加到 pairings 上。
        • n = (n - 1) // 2 + 1:将 n 先减 1 后除以 2 取整数商,再加上 1 来更新 n 的值。对于上面 n 为 7 的例子, (7 - 1) // 2 + 1 等于 4,这样 n 就被更新为 4,准备下一次循环计算。- 测试函数调用及输出
    • 这里分别调用了 solution 函数三次,并将函数返回值与预期值进行比较,然后通过 print 函数输出比较的结果(是一个布尔值)。

    • print(solution(7) == 6):调用 solution 函数并传入参数 7,然后判断函数返回值是否等于 6,并将这个比较结果(True 或 False)打印出来。根据前面函数的逻辑,当 n 为 7 时,经过一系列计算最终 pairings 应该等于 6,所以这里是在测试函数对于输入为 7 时的计算结果是否正确。

    • print(solution(14) == 13):类似地,传入参数 14,判断函数返回值是否等于 13 并打印比较结果。当 n 为 14 时,按照函数逻辑计算,pairings 应该等于 13,通过这个测试来验证函数对于输入 14 的计算准确性。

    • print(solution(1) == 0):传入参数 1,因为函数内部循环条件是 n > 1,当 n 为 1 时循环不会执行,直接返回初始设置的 pairings 值 0,所以这里是测试函数对于输入为 1 时是否能正确返回 0。

总体而言,这段代码定义了一个函数来根据特定规则对输入的整数 n 进行一系列计算,以累计得到某种配对数量(具体含义需结合实际应用场景确定),并在主程序部分通过简单的调用和比较来初步测试函数的正确性。