有一副扑克牌,每次出示4张牌,怎样用四则运算求出其值为24的所有表达式,用haskell实现代码。
时间: 2023-02-23 08:09:37 浏览: 135
我不熟悉Haskell,但可以用四则运算提供一些可能的表达式:(A+B)*(C+D),(A+B)*C+D,A+(B*C)+D,A+(B+C)*D,(A+B+C)*D,A+(B*C*D),A*(B+C)+D,A*(B+C*D),A*B+(C+D),A*B+(C*D),A*B*(C+D),A*B*C+D,A*(B*C+D),A*B*C*D。
相关问题
一副扑克牌,每次出示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的所有表达式。请用haskell实现代码。
以下是使用Haskell实现解答24的扑克牌表达式示例代码: solve24 :: Int -> Int -> Int -> Int -> Maybe [String]
solve24 a b c d =
let vals = [a,b,c,d]
ops = ["+","-","*","/"]
in
Just (map (\[x,y,z,w]-> x ++ y ++ z ++ w) (permutations [vals,ops,ops,vals]))
阅读全文