You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:25:09