鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

Python:每日一题 353

[复制链接]
发表于 2020-3-16 23:36:53 | 显示全部楼层

最起码比我六批,我连题目该咋解读都还没懂,还不知道从哪下手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 01:28:24 | 显示全部楼层
def f353(num_str):
    num_temp = []
    for num in num_str:
        if num.isdigit():
            num_temp.append(int(num))
            
    num_forever = num_temp.copy()
    a = num_temp.pop()
    check = False
    for i in range(len(num_temp)):
        if check:
            break
        b = num_temp[i]
        num_temp.remove(b)
        count1 = count(a,b)
        c = num_temp[0]
        d = num_temp[1]
        count2 = count(c,d)
        for ab in count1:
            if check:
                break
            for cd in count2:
                if check:
                    break
                count3 = count(ab,cd)
                for abcd in count3:
                    if abcd == 24:
                        check = True
                        break
        if not check:
            num_temp.insert(i,b)
    if not check:
        print('False')
                
def count(a,b):
    count_list = []
    c = a+ b
    d = abs(a - b)
    e = a * b
    if b :
        f = a / b
    else:
        f = 0
    count_list.extend((c,d,e,f))
    return count_list


numlist = input("请输入4个数字:")
f353(numlist)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 05:09:02 | 显示全部楼层
global a,aa,pp,b,e,ee
a=[int(m) for m in input().split()]
b=[]
pp=0
e=[]
ee=[]

while True:
    random.shuffle(a)
    d=copy.copy(a)
    c=d[0]
    d.pop(0)
   e=[]
   x(d,c)
   if pp==24:
   break

try:
    for i in range(len(a)):
    ee.append(a[i])
    ee.append(e[i])
except:
    None

def x(d,c):
    global pp
    global e
    if len(d)>0:
        p=random.randint(1,4)
        if p==1:
            e.append('+')
            x1(d,c)
        if p==2:
            e.append('-')
            x2(d,c)
        if p==3:
            e.append('*')
            x3(d,c)
        if p==4:
            e.append('/')
            x4(d,c)
    else:
        pp=c

def x1(d,c):
    c+=d[0]
    d.pop(0)
    x(d,c)

def x2(d,c):
    c-=d[0]
    d.pop(0)
    x(d,c)

def x3(d,c):
    c*=d[0]
    d.pop(0)
    x(d,c)

def x4(d,c):
    c/=d[0]
    d.pop(0)
    x(d,c)

def po():
    global u1,u2
    g1.delete(0,tk.END)
    g1.insert(0,u1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 09:18:52 | 显示全部楼层
from fractions import Fraction


def operation(num1, num2):
    operater = '+-*'
    result = []
    for i in operater:
        try:
            expression = eval(str(num1) + i + str(num2))
            result.append(expression)
        except:
            pass
    try:
        result.append(num2 - num1)
        result.append(Fraction(num1, num2))
        result.append(Fraction(num2, num1))
    except:
        pass
    return list(set(result))
        

def test(lista):
    for a in lista:
        temp1 = lista[:]
        temp1.remove(a)
        for b in temp1:
            res1 = operation(a, b)
            for c in res1:
                temp2 = lista[:]
                temp2.remove(a)
                temp2.remove(b)
                res2 = operation(temp2[0], temp2[1])
                for d in res2:
                    res3 = operation(c, d)
                    if 24 in res3:
                        return True
                for e in temp2:
                    res4 = operation(c, e)
                    for f in res4:
                        temp3 = lista[:]
                        temp3.remove(a)
                        temp3.remove(b)
                        temp3.remove(e)
                        for g in temp3:
                            res5 = operation(f, g)
                        if 24 in res5:
                            return True
    return False
到处修修补补,运行效率极低

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-17 10:28:59 | 显示全部楼层
import math
def f353(arr): 
    def solve(n):
        if(1 == n):
            if(math.fabs(24 - tempArr[0]) < 1E-6):
                return True
            else:
                return False
        for i in range(0, n):
            for j in range(i+1, n):
                a, b = tempArr[i], tempArr[j]                
                tempArr[j] = tempArr[n - 1]
                tempArr[i] = a + b
                if ( solve(n - 1) ) :
                    return True
                tempArr[i] = a - b
                if solve(n - 1) :
                    return True
                tempArr[i] = b - a
                if solve(n - 1):
                    return True
                tempArr[i] = a * b
                if solve(n - 1):
                    return True;
                if b != 0:
                    tempArr[i] = a / b
                    if solve(n - 1):
                        return True
                if a != 0:
                    tempArr[i] = b / a
                    if solve(n - 1):
                        return True
                tempArr[i], tempArr[j] = a, b        
        return False        
    tempArr = arr  
    return True if solve(4) else False

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-17 11:54:32 | 显示全部楼层
import itertools
def func353(h):
    from itertools import permutations as p
    for a,b,c,d in p(list(map(str,h)),4):
        for x,y,z in p(list("+++---***///"),3):
            if eval((str(eval(a+x+b))+y+c+z+d))==24:
                return True
            if eval(str(eval(a+x+b))+y+str(eval(c+z+d)))==24:
                return True
            if eval(str(eval(str(eval(a+x+b))+y+c))+z+d)==24:
                    return True
    return False

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-17 12:16:02 | 显示全部楼层
from itertools import permutations

def fun353(x):
    for cards in permutations(x):
        for i in ['+','-','*','/']:
            for j in ['+','-','*','/']:
                for n in ['+','-','*','/']:
                    if eval('%s%s%s%s%s%s%s'%(cards[0],i,cards[1],j,cards[2],n,cards[3])) == 24:
                        return True
        cards_1 = cards[0]
        cards_2 = cards[1:]
        for i in ['+','-']:
            for j in ['+','-']:
                sum_cards_2 = eval('%s%s%s%s%s'%(cards_2[0],i,cards_2[1],j,cards_2[2]))
                try:
                    if cards_1*sum_cards_2==24 or cards_1/sum_cards_2==24:
                        return True
                except ZeroDivisionError:
                    continue
        cards_2 = cards[3]
        cards_1 = cards[:3]
        for i in ['+','-']:
            for j in ['+','-']:
                sum_cards_1 = eval('%s%s%s%s%s'%(cards_1[0],i,cards_1[1],j,cards_1[2]))
                try:
                    if sum_cards_1*cards_2==24 or sum_cards_1/cards_2==24:
                        return True
                except ZeroDivisionError:
                    continue
        cards_1 = cards[:2]
        cards_2 = cards[2:]
        for i in ['+','-']:
            for j in ['+','-']:
                sum_cards_1 = eval('%s%s%s'%(cards_1[0],i,cards_1[1]))
                sum_cards_2 = eval('%s%s%s'%(cards_2[0],i,cards_2[1]))
                try:
                    if sum_cards_1*sum_cards_2==24 or sum_cards_1*sum_cards_2==24:
                        return True
                except ZeroDivisionError:
                    continue
    return False

评分

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

查看全部评分

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

使用道具 举报

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

解答错误

输入:[1, 3, 4, 6]
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 13:23:00 | 显示全部楼层

解答错误

输入:[1, 5, 9, 1]
输出:True
预期结果:False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 13:24:55 | 显示全部楼层

解答错误

输入:[1, 3, 4, 6]
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 13:25:44 | 显示全部楼层
钙硼钡锗 发表于 2020-3-17 05:09
global a,aa,pp,b,e,ee
a=
b=[]

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

使用道具 举报

 楼主| 发表于 2020-3-17 13:26:16 | 显示全部楼层
wcshds 发表于 2020-3-17 09:18
到处修修补补,运行效率极低

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

使用道具 举报

 楼主| 发表于 2020-3-17 13:27:08 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 13:27:36 | 显示全部楼层
whosyourdaddy 发表于 2020-3-17 11:54
import itertools
def func353(h):
    from itertools import permutations as p

输入 [1, 2, 1, 2] 出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 13:28:07 | 显示全部楼层

解答错误

输入:[1, 3, 4, 6]
输出:False
预期结果:True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 13:46:18 | 显示全部楼层
zltzlt 发表于 2020-3-17 13:23
解答错误

输入:[1, 5, 9, 1]
def f353(x):
    from itertools import combinations as cb
    def com(a,b):
        l=len(a)
        if l==1:
            return a[0]==b
        m=eval('*'.join(map(str,a)))
        if m==b:
            return True
        elif m<b:
            return False
        elif l==2:
            e,f=a
            return com([e],b+f) or com([e],b-f) or com([e],b*f) or com([e],b/f)
        else:
            for e,f in cb(a,2):
                if f<e:
                    e,f=f,e
                t=a[:]
                t.remove(e)
                t.remove(f)
                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)
恩,再看看- -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 17:54:37 | 显示全部楼层
import itertools
def func353(h):
    from itertools import permutations as p
    for a,b,c,d in p(list(map(str,h)),4):
        for x,y,z in p(list("+++---***///"),3):
            try:
                if eval((str(eval(a+x+b))+y+c+z+d))==24:
                    return True
                if eval(str(eval(a+x+b))+y+str(eval(c+z+d)))==24:
                    return True
                if eval(str(eval(str(eval(a+x+b))+y+c))+z+d)==24:
                    return True
            except ZeroDivisionError:
                continue
    return False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 17:35:40 | 显示全部楼层
from operator import add,sub,mul,truediv
import itertools
operators = (add, sub, mul, truediv)
sucess = []
def n353(list1):

    for h in itertools.permutations(list1, 4):
        for i in operators:
            for j in operators:
                for k in operators:
                    try:
                        result = i(j(k(h[2], h[3]), h[1]), h[0])
                        if result == 24:
                            return True
                    except:
                        pass  
                    try:
                        result = i(j(h[2], h[3]), k(h[1], h[0]))
                        if result == 24:
                            return True
                    except:
                        pass
    return False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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