豆包MarsCode AI刷题

50 阅读4分钟

解题思路

理解问题

小U每天早上可以选择一份主食和一杯饮料,或者只选择主食或饮料中的一个。他每天的最大花费不超过 x 元。我们需要计算满足这些条件的组合数量。这个问题可以分解为以下几个关键点:

  1. 选择组合:小U可以选择一份主食和一杯饮料的组合,或者只选择主食或饮料中的一个。
  2. 最大花费限制:无论选择哪种组合,总花费不能超过 x 元。
  3. 组合数量计算:我们需要计算所有满足上述条件的组合数量。

数据结构选择

为了有效地解决这个问题,我们可以选择以下数据结构:

  1. 主食价格数组:使用一个数组 staples 来存储所有主食的价格。
  2. 饮料价格数组:使用一个数组 drinks 来存储所有饮料的价格。
  3. 最大花费限制:使用一个整数 x 表示小U每天的最大花费。

算法步骤

  1. 初始化计数器

    • 使用一个变量 count 来记录满足条件的组合数量。初始时,count 设为 0。
  2. 遍历所有主食和饮料的组合

    • 通过双重循环遍历所有可能的主食和饮料组合。
    • 对于每一对主食和饮料的价格,检查它们的总价是否不超过 x
    • 如果总价不超过 x,则计数器 count 加一。
  3. 加上只选择主食或只选择饮料的情况

    • 遍历主食数组 staples,检查每个主食的价格是否不超过 x
    • 如果某个主食的价格不超过 x,则计数器 count 加一。
    • 遍历饮料数组 drinks,检查每个饮料的价格是否不超过 x
    • 如果某个饮料的价格不超过 x,则计数器 count 加一。
  4. 返回结果

    • 最后返回计数器 count 的值,即为满足条件的组合数量。

详细步骤解析

  1. 初始化计数器

    • 我们首先初始化一个计数器 count,用于记录满足条件的组合数量。这个计数器在开始时为 0。
  2. 遍历所有主食和饮料的组合

    • 我们使用两个嵌套的循环来遍历所有可能的主食和饮料组合。外层循环遍历主食数组 staples,内层循环遍历饮料数组 drinks
    • 对于每一对主食和饮料的价格,我们计算它们的总价,并检查这个总价是否不超过 x
    • 如果总价不超过 x,则说明这个组合是有效的,我们将计数器 count 加一。
  3. 加上只选择主食或只选择饮料的情况

    • 除了主食和饮料的组合,小U还可以只选择主食或只选择饮料。因此,我们需要分别遍历主食数组和饮料数组,检查每个主食和饮料的价格是否不超过 x
    • 对于主食数组 staples,我们遍历每个主食的价格,如果某个主食的价格不超过 x,则计数器 count 加一。
    • 对于饮料数组 drinks,我们遍历每个饮料的价格,如果某个饮料的价格不超过 x,则计数器 count 加一。
  4. 返回结果

    • 最后,我们将计数器 count 的值返回,这个值即为满足条件的组合数量。

总结

通过上述步骤,我们可以有效地计算出小U每天早上有多少种不同的选择,满足其最大花费不超过 x。这个方法的时间复杂度为 O(n * m),其中 n 是主食的数量,m 是饮料的数量。虽然这个时间复杂度在数据量较大时可能不够高效,但对于一般情况下的数据量,这个方法已经足够快速和有效。

代码框架

python

def 

count_breakfast_combinat

ions(staples, drinks, x)

:

    count = 0

    

    # 遍历所有主食和饮料的

    组合

    for staple_price in 

    staples:

        for drink_price 

        in drinks:

            if 

            staple_price

             + 

            drink_price 

            <= x:

                count 

                += 1

    

    # 加上只选择主食的情况

    for staple_price in 

    staples:

        if staple_price 

        <= x:

            count += 1

    

    # 加上只选择饮料的情况

    for drink_price in 

    drinks:

        if drink_price 

        <= x:

            count += 1

    

    return count

# 示例调用

staples = [5, 3, 8]

drinks = [2, 4, 6]

x = 10

print

(count_breakfast_combina

tions(staples, drinks, 

x))  # 输出: 12

解释

  1. 初始化计数器:使用 count 变量记录满足条件的组合数量。
  2. 遍历所有主食和饮料的组合:通过双重循环遍历所有可能的主食和饮料组合,检查总价是否不超过 x
  3. 加上只选择主食或只选择饮料的情况:分别遍历主食和饮料数组,检查单独选择的情况。
  4. 返回结果:最后返回计数器的值。

通过这种方式,我们可以有效地计算出小U每天早上有多少种不同的选择,满足其最大花费不超过 x