Ruby编程题:计算冰淇淋口味与配料的有效组合数
解决冰淇淋口味与配料组合计数问题
核心思路
总组合数为口味数量乘以配料数量,再减去唯一的禁止组合("chocolate chip"口味搭配"chocolate chips"配料)。若后续规则需要扩展,也可通过遍历过滤的方式实现更灵活的判断逻辑。
实现方式
方式一:直接计算(适用于固定单一禁止规则)
这种方式高效简洁,适配当前仅一组禁止组合的场景:
def combinations(flavors, toppings) # 计算所有可能的组合总数 total = flavors.length * toppings.length # 减去被禁止的那1组 total - 1 end flavors = ["fudge", "vanilla", "chocolate chip", "cookie dough"] toppings = ["chocolate chips", "sprinkles", "mint"] puts combinations(flavors, toppings) # 输出11
方式二:遍历过滤(适用于可扩展的规则)
若后续需要添加更多禁止组合,这种方式更便于维护:
def combinations(flavors, toppings) count = 0 flavors.each do |flavor| toppings.each do |topping| # 跳过禁止的组合 next if flavor == "chocolate chip" && topping == "chocolate chips" count += 1 end end count end
方式三:Ruby风格的简洁实现
利用Array#product生成所有组合,再通过reject过滤掉禁止项:
def combinations(flavors, toppings) flavors.product(toppings).reject do |flavor, topping| flavor == "chocolate chip" && topping == "chocolate chips" end.size end
关于名称匹配的说明
题目明确禁止的是特定字符串对:口味完全等于"chocolate chip"且配料完全等于"chocolate chips"。因此直接通过字符串相等判断即可,无需处理模糊匹配或名称变体问题。
内容的提问来源于stack exchange,提问作者user20818030
相关产品推荐
相关产品推荐

