一副扑克牌,每次出示4张,以四则运算计算它的值,给出结果为24的表达式。请以ruby实现代码。
时间: 2023-02-27 20:25:01 浏览: 88
你可以使用以下代码实现这个需求:
```
def value_of(card)
if card == 'A'
return 1
elsif card == 'J' || card == 'Q' || card == 'K'
return 10
else
return card.to_i
end
end
def divide(cards)
return [cards] if cards.size == 1
result = []
(0...cards.size).each do |i|
c = cards[i]
rest = cards[0...i] + cards[i + 1...cards.size]
divide(rest).each do |item|
result << [c] + item
end
end
result
end
def calculate(cards)
values = divide(cards).map { |item| value_of(item[0]) }
ops = %w(+ - * /)
ops.repeated_permutation(values.size - 1).each do |item|
expression = values.zip(item).flatten.join(' ')
return expression if eval(expression) == 24
end
nil
end
cards = ['A', '2', '3', '4']
expression = calculate(cards)
puts expression if expression
```
该代码使用递归函数`divide`对每个卡片生成所有可能的组合,然后对每个组合使用四则运算生成表达式,并使用`eval`函数计算其结果。如果结果为24,则返回该表达式。
阅读全文