有一副扑克牌,每次出示4张牌,怎样用四则运算求出其值为24的表达式,用ruby实现代码。
时间: 2023-02-23 14:03:32 浏览: 160
任意给出4张牌,计算能否用+、-、×、÷将其组合成24。
3星 · 编辑精心推荐
要求出值为24的表达式,需要先写一个函数来生成所有的四则运算表达式,然后再遍历所有表达式并使用Ruby的eval函数求值,如果结果为24就输出该表达式。
代码如下:
```
def generate_expression(numbers)
return [numbers.join("")] if numbers.length == 1
res = []
numbers.each_with_index do |num1, i|
others = numbers.select { |num2| num2 != num1 }
sub_expression = generate_expression(others)
sub_expression.each do |exp|
res << "#{num1}+#{exp}"
res << "#{num1}-#{exp}"
res << "#{exp}-#{num1}"
res << "#{num1}*#{exp}"
res << "#{exp}*#{num1}" if exp != "0"
res << "#{num1}/#{exp}" if exp != "0"
res << "#{exp}/#{num1}" if num1 != "0"
end
end
res
end
def calculate_expression(numbers)
expressions = generate_expression(numbers)
expressions.each do |expression|
begin
value = eval(expression)
return expression if value == 24
rescue
next
end
end
nil
end
def find_24(numbers)
expression = calculate_expression(numbers.map(&:to_s))
expression ? "表达式为:#{expression}" : "没有找到合法的表达式"
end
puts find_24([1, 2, 3, 4])
```
注意:eval函数可以执行字符串中的Ruby代码,但是很危险,因为它可以执行任意的代码,所以使用时要特别小心。
阅读全文