using
System;
public
class
GFG {
static
double
TOLERANCE = 0.001;
static
bool
isNumber24PossibleUtil(
double
op1,
double
op2)
{
if
(Math.Abs(op1 + op2 - 24.0) < TOLERANCE
|| Math.Abs(op1 - op2 - 24.0) < TOLERANCE
|| Math.Abs(op1 * op2 - 24.0) < TOLERANCE
|| op2 != 0
&& Math.Abs(op1 / op2 - 24.0)
< TOLERANCE)
return
true
;
return
false
;
}
static
bool
isNumber24PossibleUtil(
double
op1,
double
op2,
double
op3)
{
if
(isNumber24PossibleUtil(op1 + op2, op3)
|| isNumber24PossibleUtil(op1 - op2, op3)
|| isNumber24PossibleUtil(op1 * op2, op3)
|| op2 != 0
&& isNumber24PossibleUtil(op1 / op2,
op3))
return
true
;
if
(isNumber24PossibleUtil(op1, op2 + op3)
|| isNumber24PossibleUtil(op1, op2 - op3)
|| isNumber24PossibleUtil(op1, op2 * op3)
|| op3 != 0
&& isNumber24PossibleUtil(op1,
op2 / op3))
return
true
;
return
false
;
}
static
bool
isNumber24Possible(
int
[] arr)
{
if
(isNumber24PossibleUtil(arr[0] + arr[1], arr[2],
arr[3])
|| isNumber24PossibleUtil(arr[0] - arr[1],
arr[2], arr[3])
|| isNumber24PossibleUtil(arr[0] * arr[1],
arr[2], arr[3])
|| arr[1] != 0
&& isNumber24PossibleUtil(
arr[0] / arr[1], arr[2], arr[3]))
return
true
;
if
(isNumber24PossibleUtil(arr[0], arr[1] + arr[2],
arr[3])
|| isNumber24PossibleUtil(
arr[0], arr[1] - arr[2], arr[3])
|| isNumber24PossibleUtil(
arr[0], arr[1] * arr[2], arr[3])
|| arr[2] != 0
&& isNumber24PossibleUtil(
arr[0], arr[1] / arr[2], arr[3]))
return
true
;
if
(isNumber24PossibleUtil(arr[0], arr[1],
arr[2] + arr[3])
|| isNumber24PossibleUtil(arr[0], arr[1],
arr[2] - arr[3])
|| isNumber24PossibleUtil(arr[0], arr[1],
arr[2] * arr[3])
|| arr[3] != 0
&& isNumber24PossibleUtil(
arr[0], arr[1], arr[2] / arr[3]))
return
true
;
return
false
;
}
static
public
void
Main()
{
int
[] arr = { 3, 6, 8, 2 };
if
(isNumber24Possible(arr)) {
Console.WriteLine(
"Possible"
);
}
else
{
Console.WriteLine(
"Not Possible"
);
}
}
}