HJ89 24点运算 用递归生成器进行数列穷举()-其他
HJ89 24点运算 用递归生成器进行数列穷举()
思路:
1、对4张牌进行全排序,并输出列表
2、分别对排序进行计算尝试,采用穷举方式
3、返回结果
除了用递归生成器进行数组全排序外,也用模块
from itertools
import
permutations,进行全排序。
1 #输出算式运算顺序从左至右运算,不需要括号确定优先级。
2
3 #列举所有排序方式,比如 1234,1324......
4 def relist(a):#用递归生成器返回不重复顺序的列表
5 if len(a)==1:
6 yield a
7 for i in range(len(a)):
8 for j in relist(a[:i]+a[i+1:]):
9 #print( a[i],j)
10 yield [a[i]]+j
12 def twentyfour(a):#采用多重循环对数组a所有计算方式穷举。
13 operator=['+','-','*','/']
14 for i in operator:
15 for j in operator:
16 for n in operator:
17 if dop[i](dop[j](dop[n](a[0],a[1]),a[2]),a[3])==24:
18 return a,n,j,i
19 import operator
20 dop={'+':operator.add,'-':operator.sub,'*':operator.mul,'/':operator.truediv}
21 d={'J':11,'Q':12,'K':13,'A':1}
22 a=input().split()
23 b=a.copy()
24 flag=0
25 for k,i in enumerate(a):
26 if i.isdigit():
27 a[k]=int(i)
28 elif i in d:
29 a[k]=d[i]
30 else:
31 print("ERROR")
32 flag=1
33 #用flag使当输出”ERROR"不再进行后面运算,用flag1,输出NONE.
34 if flag==0:
35 flag1=0
36 for i in relist(a):
37 #print(i)
38 new=[]
39 if twentyfour(i):
40 temp,n1,n2,n3=twentyfour(i)
41 for i in temp:
42 for k,j in enumerate(a):
43 if i==j: #查表打印特殊字符JQKA
44 new.append(b[k])
45 break
46 tem=str(new[0])+n1+str(new[1])+n2+str(new[2])+n3+str(new[3])
47 print(tem)
48 flag1=1
49 break
50 if flag1==0:
51 print('NONE')
————————
思路:
1、对4张牌进行全排序,并输出列表
2、分别对排序进行计算尝试,采用穷举方式
3、返回结果
除了用递归生成器进行数组全排序外,也用模块
from itertools
import
permutations,进行全排序。
1 #输出算式运算顺序从左至右运算,不需要括号确定优先级。
2
3 #列举所有排序方式,比如 1234,1324......
4 def relist(a):#用递归生成器返回不重复顺序的列表
5 if len(a)==1:
6 yield a
7 for i in range(len(a)):
8 for j in relist(a[:i]+a[i+1:]):
9 #print( a[i],j)
10 yield [a[i]]+j
12 def twentyfour(a):#采用多重循环对数组a所有计算方式穷举。
13 operator=['+','-','*','/']
14 for i in operator:
15 for j in operator:
16 for n in operator:
17 if dop[i](dop[j](dop[n](a[0],a[1]),a[2]),a[3])==24:
18 return a,n,j,i
19 import operator
20 dop={'+':operator.add,'-':operator.sub,'*':operator.mul,'/':operator.truediv}
21 d={'J':11,'Q':12,'K':13,'A':1}
22 a=input().split()
23 b=a.copy()
24 flag=0
25 for k,i in enumerate(a):
26 if i.isdigit():
27 a[k]=int(i)
28 elif i in d:
29 a[k]=d[i]
30 else:
31 print("ERROR")
32 flag=1
33 #用flag使当输出”ERROR"不再进行后面运算,用flag1,输出NONE.
34 if flag==0:
35 flag1=0
36 for i in relist(a):
37 #print(i)
38 new=[]
39 if twentyfour(i):
40 temp,n1,n2,n3=twentyfour(i)
41 for i in temp:
42 for k,j in enumerate(a):
43 if i==j: #查表打印特殊字符JQKA
44 new.append(b[k])
45 break
46 tem=str(new[0])+n1+str(new[1])+n2+str(new[2])+n3+str(new[3])
47 print(tem)
48 flag1=1
49 break
50 if flag1==0:
51 print('NONE')