小U的早餐选择问题 | 豆包MarsCode AI 刷题

86 阅读3分钟

问题描述

小U同学每天在早餐店有多种主食和饮料可以选择。给定两个数组,staples 表示不同主食的价格,drinks 表示不同饮料的价格。每天早上,小U最多会花费不超过 xx 元,他可能选择一份主食、一杯饮料,或只选择主食或饮料中的一个。你的任务是计算小U每天早上有多少种不同的选择,满足其最大花费不超过 xx。

例如:对于输入的主食价格 5 20 5 和饮料价格 5 5 2,如果小U的最大花费为 5,则一共有 5 种不同的选择。


测试样例

样例1:

输入:staples = [5, 20, 5] ,drinks = [5, 5, 2] ,x = 5
输出:5

样例2:

输入:staples = [3, 10, 7] ,drinks = [2, 5] ,x = 7
输出:5

样例3:

输入:staples = [10, 15] ,drinks = [5, 6] ,x = 20
输出:7

问题理解

小U每天早上可以选择一份主食、一杯饮料,或者只选择主食或饮料中的一个。我们需要计算在不超过给定预算 x 的情况下,有多少种不同的选择。(我们可以分两类讨论一类都选,另一类只选择其中一种。)

思路分析

  1. 单独选择主食:遍历主食数组,统计价格不超过 x 的主食数量。
 for i in staples:
        if i<=x:
            sum1+=1
  1. 单独选择饮料:遍历饮料数组,统计价格不超过 x 的饮料数量。
    for i in drinks:
        if i<=x:
            sum2+=1
  1. 组合选择主食和饮料:遍历主食数组,对于每个主食,再遍历饮料数组,统计主食和饮料的总价格不超过 x 的组合数量。
for i in staples:
        for j in drinks:
            if i+j<=x:
                count+=1
  1. 合并所有选择:将单独选择主食、单独选择饮料和组合选择主食和饮料的数量相加,得到最终结果。
 sum=count+sum1+sum2

python代码展示

def solution(staples: list, drinks: list, x: int) -> int:
    count=0
    sum1=0
    sum2=0
    for i in staples:
        for j in drinks:
            if i+j<=x:
                count+=1
    for i in staples:
        if i<=x:
            sum1+=1
    for i in drinks:
        if i<=x:
            sum2+=1
    sum=count+sum1+sum2
    return sum

样例分析

样例:

输入:staples = [5, 20, 5] ,drinks = [5, 5, 2] ,x = 5
输出:5

  1. 单独选择主食

    • 主食价格为 [5, 20, 5]
    • 在预算 x = 5 的情况下,只有价格为 5 的主食可以选择。
    • 因此,单独选择主食的数量为 2(两个价格为 5 的主食)。
  2. 单独选择饮料

    • 饮料价格为 [5, 5, 2]
    • 在预算 x = 5 的情况下,价格为 5 和 2 的饮料可以选择。
    • 因此,单独选择饮料的数量为 3(两个价格为 5 的饮料和一个价格为 2 的饮料)。
  3. 组合选择主食和饮料

    • 主食价格为 [5, 20, 5],饮料价格为 [5, 5, 2]
    • 在预算 x = 5 的情况下,没有满足的情况。
    • 因此,组合选择主食和饮料的数量为 0
  4. 合并所有选择

    • 单独选择主食的数量:2
    • 单独选择饮料的数量:3
    • 组合选择主食和饮料的数量:0
    • 总选择数量为 2 + 3 + 0 = 5

根据上述分析,总选择数量应该是5