** **自己的想法,有点原始,望大神勿喷 **
Python3.5 牛客网 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
牛客链接 **
1、暴搜法
import itertools
def generate_n(num
):
result
= []
for each
in set(itertools
.permutations
(num
)):
result
.append
(each
)
return result
def operator_arr(s
):
ls
= []
for i
in s
:
for j
in s
:
for k
in s
:
ls
.append
([i
, j
, k
])
return ls
def Is_24(number
, symbol
):
flag
= False
for x1
in symbol
:
for x2
in number
:
if eval(x2
[0] + x1
[0] + x2
[1] + x1
[1] + x2
[2] + x1
[2] + x2
[3]) == 24:
print('True:', x2
[0] + x1
[0] + x2
[1] + x1
[1] + x2
[2] + x1
[2] + x2
[3])
flag
= True
return flag
elif eval( '(' + x2
[0] + x1
[0] + x2
[1] + ')' + x1
[1] + x2
[2] + x1
[2] + x2
[3] ) == 24:
print('True:','(' + x2
[0] + x1
[0] + x2
[1] + ')' + x1
[1] + x2
[2] + x1
[2] + x2
[3])
flag
= True
return flag
elif eval( x2
[0] + x1
[0] + '(' + x2
[1] + x1
[1] + x2
[2] + ')' + x1
[2] + x2
[3] ) == 24:
print('True:', x2
[0] + x1
[0] + '(' + x2
[1] + x1
[1] + x2
[2] + ')' + x1
[2] + x2
[3] )
flag
= True
return flag
else:
pass
return flag
if __name__
== '__main__':
n
= input().split
()
s
= ['+', '-', '*', '/']
number
= generate_n
(n
)
symbol
= operator_arr
(s
)
print( Is_24
(number
, symbol
) )
2、递归 牛客网已提交代码]中找到了这个。(https://www.nowcoder.com/profile/59561197/codeBookDetail?submissionId=32414864)
在这里插入代码片
def f(res
,n
):
x
= False
if len(n
) == 1:
if n
[0] ==res
:
return True
else:
return False
for i
in range(len(n
)):
a
= n
[i
]
b
= n
[:]
b
.remove
(a
)
x
= x
or f
(res
-a
,b
) or f
(res
*a
,b
) or f
(res
/a
,b
) or f
(res
+a
,b
)
return x
while True:
try:
n
= input().split
()
flag
= False
if len(n
) != 4:
print('false')
break
for i
in range(4):
n
[i
] = float(n
[i
])
if f
(24.0, n
):
print('true')
else:
print('false')
except:
break
转载请注明原文地址:https://blackberry.8miu.com/read-42333.html