l Problem
The 24point game is a classic intellectual game using poker to carry out the calculation. The game is detailed as follows: Take out the big and little jokers from a pack of pokers, and extract any four from the remaining 52 cards. Use the addition, subtraction, multiplication, division and parentheses to manipulate the numbers on the four cards (J, Q, K, and A represent 11, 12, 13, and 1 respectively) to get the result of 24. Each card must be used once, but not repeatedly.
Write a program to manipulate any four cards for the result of 24, and print out its solution in the form of text. If no solution exists, print out "No solution".
l Tip
4. Arrange 4 numbers in different orders.
5. In the first layer of loop, take any three from the 4 operators and arrange them in different ways.
6. In the second layer of loop, insert the three operators into the four numbers.
7. Enumerate the five cases of using parentheses as follows (where A, B, C, and D represent numbers, # represents different operators):
((A#B)#C)#D
(A#(B#C))#D
(A#B)#(C#D)
A#((B#C)#D)
A#(B#(C#D))
l Code

A 
B 
C 
D 

1 
[3,3,8,8] 




2 
[1234,1243,1324,1342,1423,1432,2134,2143,2314,2341,2413,2431,3124,3142,3214,3241,3412,3421,4123,4132,4213,4231,4312,4321] 




3 
for A2 
=A1(4.(int(A3/power(10,4#))%10)) 


Arrange A1’s members according to the orders list in A2 
4 
for 64 


Randomly select 3 operators among +,,*,/. The selected operators are allowed to be duplicate. So each number has 4 choices, that is 4×4×4, which is a total of 64 ways 

5 


=["+","","*","/"](3.(int((B41)/power(4,3#))%4+1)) 

Convert the current loop number to a quarternary number and add 1 to each digit to get the current way of arranging the operators 
6 


>a=B3(1),b=B3(2),c=B3(3),d=B3(4),x=C5(1),y=C5(2),z=C5(3) 


7 


=func(A28,[x,a,func(A28,[y,b,func(A28,[z,c,d])])]) 

Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 
8 


if abs(C724)<0.0001 


9 



=string(a)+x+"("+string(b)+y+"("+string(c)+z+string(d)+"))" 

10 


=D10D9 
Store the result of computing the expression if it is 24 

11 

=func(A28,[x,a,func(A28,[z,func(A28,[y,b,c]),d])]) 

Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 

12 

if abs(C1124)<0.0001 



13 


=string(a)+x+"(("+string(b)+y+ string(c)+")"+z+string(d)+")" 


14 


=D14D13 
Store the result of computing the expression if it is 24 

15 


=func(A28,[y,func(A28,[x,a,b]),func(A28,[z,c,d])]) 

Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 
16 


if abs(C1524)<0.0001 


17 



="("+string(a)+x+string(b)+")"+y+"("+string(c)+z+string(d)+")" 

18 



=D18D17 
Store the result of computing the expression if it is 24 
19 


=func(A28,[z,func(A28,[y,func(A28,[x,a,b]),c]),d]) 

Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 
20 

if abs(C1924)<0.0001 



21 


="(("+string(a)+x+string(b)+")"+y+string(c)+")"+z+string(d) 


22 


=D22D21 
Store the result of computing the expression if it is 24 

23 

=func(A28,[z,func(A28,[x,a,func(A28,[y,b,c])]),d]) 

Surround the expression A#(B#(C#D)) with parentheses to call the subprogram for computation 

24 

if abs(C2324)<0.0001 



25 



="("+string(a)+x+"("+string(b)+y+string(c)+"))"+z+string(d) 

26 



=D26D25 
Store the result of computing the expression if it is 24 
27 
=[D10,D14,D18,D22,D26].union().id() 



The final result 
28 
func 



The computation has 3 parameters: the first is operator, the second is left operand, and the third is the right operand 
29 

if A28(1)=="+" 
return A28(2)+A28(3) 


30 
if A28(1)=="" 
return A28(2)A28(3) 



31 
if A28(1)=="*" 
return A28(2)*A28(3) 



32 
if A28(1)=="/" 
return A28(2)/A28(3) 


l Result