鱼C论坛

 找回密码
 立即注册
查看: 3448|回复: 37

Python:每日一题 353

[复制链接]
发表于 2020-3-16 17:59:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


给定一个整数数组,代表 4 张写有 1 到 9 数字的牌。判断是否能通过添加 *,/,+,-,(,) 得到 24 的运算结果。

注意:
1. 除法运算符代表小数除法,例如 5 / 2 = 2.5 。
2. 每个运算符对两个数进行运算。不能用 - 作为一元运算符
3. 不能将数字连接在一起。例如,输入为 [1, 2, 1, 2] 时,不能写成 12 + 12 。

示例 1:

输入:[4, 1, 8, 7]
输出:True
解释:(8-4) * (7-1) = 24
示例 2:

输入:[1, 2, 1, 2]
输出:False


欢迎大家一起答题!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-16 18:10:35 | 显示全部楼层
注意2是什么意思,另外4个数里面有没有重复数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 18:16:32 | 显示全部楼层
是不是说不能把减号当负号的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 18:56:47 | 显示全部楼层
本帖最后由 zltzlt 于 2020-3-17 13:20 编辑
from operator import add,sub,mul
from fractions import Fraction as div
from itertools import permutations as perm
operators=(add,sub,mul,div)
target=24

class Solution:
        def judgePoint24(self, nums: List[int]) -> bool:
                for a,b,c,d in perm(nums):
                        for x in operators:
                                for y in operators:
                                        for z in operators:
                                                try:
                                                        p=z(a,y(b,x(c,d)))==target
                                                except:
                                                        p=0
                                                try:
                                                        q=z(x(a,b),y(c,d))==target
                                                except:
                                                        q=0
                                                if p or q:
                                                        return True
                return False
我曰,我要吐了……

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 19:32:15 | 显示全部楼层
这题没法做,只能每个可能性都尝试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 19:32:43 | 显示全部楼层
感觉自己的方法好蠢。。。。
import itertools


def f353(list1):
    str1 = ""
    for i in list1:
        str1 += str(i)
    num_list = list(itertools.permutations(str1,4))
    symbol_list = list(itertools.permutations(["+", "-", "*", "/", "+", "-", "*", "/", "+", "-", "*", "/"], 3))
    for j in num_list:
        for h in symbol_list:
            if eval((j[0] + h[0] + j[1]) + h[1] + j[2] + h[2] + j[3]) == 24:
                return True
            if eval(j[0] + h[0] + (j[1] + h[1] + j[2]) + h[2] + j[3]) == 24:
                return True
            if eval(j[0] + h[0] + j[1] + h[1] + (j[2] + h[2] + j[3])) == 24:
                return True
            if eval((j[0] + h[0] + j[1]) + h[1] + (j[2] + h[2] + j[3])) == 24:
                return True
            if eval((j[0] + h[0] + j[1] + h[1] + j[2]) + h[2] + j[3]) == 24:
                return True
            if eval(j[0] + h[0] + (j[1] + h[1] + j[2] + h[2] + j[3])) == 24:
                return True
            if eval(j[0] + h[0] + j[1] + h[1] + j[2] + h[2] + j[3]) == 24:
                return True
    else:
        return False

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 19:33:56 | 显示全部楼层
l0stparadise 发表于 2020-3-16 19:32
感觉自己的方法好蠢。。。。

可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 19:40:02 | 显示全部楼层
fan1993423 发表于 2020-3-16 18:10
注意2是什么意思,另外4个数里面有没有重复数

可能有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 19:40:06 | 显示全部楼层
fan1993423 发表于 2020-3-16 18:16
是不是说不能把减号当负号的意思

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 19:59:25 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-3-16 21:37 编辑
fan1993423 发表于 2020-3-16 19:32
这题没法做,只能每个可能性都尝试


只有小于等于9720种可能性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 20:02:19 | 显示全部楼层
本帖最后由 塔利班 于 2020-3-17 11:24 编辑
def f353(x):
    from itertools import combinations as cb
    def com(a,b):
        if len(a)==1:
            return a[0]==b
        m=eval('*'.join(map(str,a)))
        if m==b:
            return True
        elif m<b:
            return False
        else:
            for e in a:
                t=a[:]
                t.remove(e)
                if com(t,b+e) or com(t,b-e) or com(t,b*e) or com(t,b/e):
                    return True
            for e,f in cb(a,2):
                if f<e:
                    e,f=f,e
                for g in [f+e,f-e,f*e,f/e]:
                    if com(t,b+g) or com(t,b-g) or com(t,b*g) or com(t,b/g) if g else 0:
                        return True
            return False
    return com(x,24)

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 20:17:23 | 显示全部楼层
楼主有个注意事项没写出:
每个张牌只能用一次。
不然的话……
2+2+2+2+2+2+2+2+2+2+2+1+1=24
我感觉短时间内我想不出来解法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 20:29:33 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-16 19:59
只有小于等于405种可能性

405 是怎么出来的数据?是能够得到True的输入吗?
在没找到规律的情况下暴力求解的话可能性多了去了。
4个数字4个位置,加上三个位置的四则运算符号,那就是1536种可能,再加上必须有括号的情况那就是1560种情况了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 21:04:23 | 显示全部楼层

你这个好像不太对,我输入[3, 6, 7, 10]出来False,( 6 / (3 / 7) + 10 ) 应该是可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 21:10:33 | 显示全部楼层
先占个位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 21:16:38 | 显示全部楼层
阴阳神万物主 发表于 2020-3-16 20:29
405 是怎么出来的数据?是能够得到True的输入吗?
在没找到规律的情况下暴力求解的话可能性多了去了。
...

抱歉啊……少算了排列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 21:22:58 | 显示全部楼层
阴阳神万物主 发表于 2020-3-16 20:17
楼主有个注意事项没写出:
每个张牌只能用一次。
不然的话……

一般玩 24 点游戏每张牌也只能用一次啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 21:31:28 | 显示全部楼层
zltzlt 发表于 2020-3-16 21:22
一般玩 24 点游戏每张牌也只能用一次啊

版主求求你了……别再出这种变态题了……我要吐了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 22:01:44 | 显示全部楼层
本帖最后由 塔利班 于 2020-3-16 22:13 编辑
wcshds 发表于 2020-3-16 21:04
你这个好像不太对,我输入[3, 6, 7, 10]出来False,( 6 / (3 / 7) + 10 ) 应该是可以的


哦,是有问题,pm我以为迭代的结果不一样,已改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 22:44:58 | 显示全部楼层
明天再写吧,今天有点晚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表