一副扑克牌,每次出示4张,只允许使用四则运算求值,列出结果为24的所有表达式。请用python实现代码
时间: 2023-03-14 08:09:59 浏览: 100
答:import itertoolsdef calculate_24_points(cards):# 创建所有可能的表达式
expressions = itertools.product(('+', '-', '*', '/'), repeat=3)# 将4张牌的值放入一个列表
values = [c.value for c in cards]for expression in expressions:# 将运算符和牌面值放入一个字符串,用eval函数执行
expression_str = '{}{}{}{}{}{}{}'.format(values[0], expression[0], values[1], expression[1], values[2], expression[2], values[3])# 如果结果为24,则返回表达式
if eval(expression_str) == 24:
return expression_strreturn False
相关问题
一副扑克牌,每次出示4张,只允许使用四则运算求值,列出结果为24的所有表达式。请用haskell实现代码
这里有一段 Haskel 代码,可以求出结果为24的所有表达式:import Data.List
import Control.Monad-- Generate all combinations of four numbers from 1 to 13
combos :: [(Int, Int, Int, Int)]
combos = [(x, y, z, w) | x <- [1..13], y <- [1..13], z <- [1..13], w <- [1..13]]-- Evaluate an arithmetic expression
eval :: (Int, Int, Int, Int) -> Int
eval (x, y, z, w) = foldl (\acc x -> acc `x` y) x [z, (*), (/), (+), (-)]-- Check if a combo produces a result of 24
checkCombo :: (Int, Int, Int, Int) -> Bool
checkCombo x = eval x == 24-- Output all combos that produce a result of 24
main :: IO ()
main = mapM_ putStrLn $ map show $ filter checkCombo combos
一副扑克牌,每次出示4张,只允许使用四则运算求值,列出结果为24的所有表达式。请用ruby实现代码
```ruby
cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]cards.combination(4).each do |a, b, c, d|
expression = [a, b, c, d].permutation.map do |x, y, z, w|
[
"(#{x}+#{y}+#{z}+#{w})",
"(#{x}+#{y}*#{z}+#{w})",
"(#{x}+#{y}+#{z}*#{w})",
"(#{x}+#{y}*#{z}*#{w})",
"(#{x}*#{y}+#{z}+#{w})",
"(#{x}*#{y}+#{z}*#{w})",
"(#{x}*#{y}*#{z}+#{w})",
"(#{x}*#{y}*#{z}*#{w})",
"(#{x}+#{y}-#{z}+#{w})",
"(#{x}+#{y}*#{z}-#{w})",
"(#{x}+#{y}-#{z}*#{w})",
"(#{x}+#{y}*#{z}*#{w})",
"(#{x}*#{y}-#{z}+#{w})",
"(#{x}*#{y}+#{z}*#{w})",
"(#{x}*#{y}-#{z}*#{w})",
"(#{x}*#{y}*#{z}-#{w})"
]
end.flatten.uniq
expression.each do |expr|
if eval(expr) == 24
puts expr
end
end
end
``很高兴回答您的问题。我们可以使用Ruby语言来实现求值24的表达式。上面是一段Ruby代码,它可以帮助我们枚举出所有结果为24的表达式。
阅读全文