小C点菜问题——题目解析及解题

92 阅读2分钟

问题描述

小C来到了一家餐馆,准备点一些菜。已知该餐馆有n道菜,第i道菜的售价为wi。小C准备点一些价格相同的菜,但小C不会点单价超过m的菜。小C想知道,自己最多可以点多少道菜。

输入与输出

  • 输入:两个参数,m(1 ≤ m ≤ 100)表示小C的预算,w(1 ≤ w[i] ≤ 100)表示每道菜的价格,且w的长度不超过100。
  • 返回:一个整数,表示小C最多可以点多少道菜。

测试样例

  • 样例1:输入m = 6, w = [2, 3, 3, 6, 6, 6, 9, 9, 23],输出3。
  • 样例2:输入m = 4, w = [1, 2, 4, 4, 4],输出3。
  • 样例3:输入m = 5, w = [5, 5, 5, 5, 6, 7, 8],输出4。

解题思路

这个问题的关键在于统计每种价格的菜的数量,并找出不超过预算的情况下,哪种价格的菜可以点的最多。

  1. 过滤超过预算的菜:首先,我们需要过滤掉所有超过预算的菜,因为小C不会点这些菜。
  2. 统计每种价格的菜的数量:然后,我们统计每种价格的菜的数量。
  3. 找出最多的数量:最后,我们找出所有价格中,可以点的最多的菜的数量。

代码实现

def solution(m: int, w: list) -> int:
    price_count = {}
    for price in w:
        if price <= m:  # 过滤超过预算的菜
            if price in price_count:
                price_count[price] += 1
            else:
                price_count[price] = 1
    max_count = 0
    for count in price_count.values():  # 找出最多的数量
        if count > max_count:
            max_count = count 
    return max_count

if __name__ == '__main__':
    print(solution(6, [2, 3, 3, 6, 6, 6, 9, 9, 23]) == 3)
    print(solution(4, [1, 2, 4, 4, 4]) == 3)
    print(solution(5, [5, 5, 5, 5, 6, 7, 8]) == 4)

代码解析

  1. 初始化字典:我们使用一个字典price_count来存储每种价格的菜的数量。
  2. 遍历菜的价格:我们遍历每道菜的价格,如果价格不超过预算,就更新字典中对应的数量。
  3. 找出最多的数量:我们遍历字典中的所有值,找出最大的数量,这个数量就是小C最多可以点的菜的数量。
  4. 返回结果:最后,我们返回这个最大的数量。