import java.util.Random;
public class HelloWorld {
public static String formular;
public static void main(String[] args) {
int[] card= new int[4];
int max=13;
int min=1;
Random random = new Random();
for (int i = 0 ;i<4;i++) {
int s = random.nextInt(max)%(max-min+1) + min;
card[i] = s;
System.out.println("Card " + i + ": " + s);
}
if (canCalculate(card[0],card[1],card[2],card[3],24)) {
System.out.println("formular: " + formular+ "=24");
} else
{
System.out.println("Can't find answer");
}
}
public static boolean canCalculate(int a, int b, int c, int d, int result) {
int[] input = {a,b,c,d};
for (int i=0; i<4; i++) {
int index1 = i+1>3?i-3:i+1;
int index2 = i+2>3?i-2:i+2;
int index3 = i+3>3?i-1:i+3;
if (input[i] <= result) {
if (canCalculate(input[index1], input[index2], input[index3], result-input[i])) {
formular=input[i] + "+(" + formular + ")";
return true;
}
}
if (input[i] > result) {
if (canCalculate(input[index1], input[index2], input[index3], input[i]-result)) {
formular = input[i] + "-(" + formular + ")";
return true;
}
}
if (result%input[i] == 0 ) {
if (canCalculate(input[index1], input[index2], input[index3], result/input[i])) {
formular=input[i] + "*(" + formular + ")";
return true;
}
}
if (input[i]%result == 0 ) {
if (canCalculate(input[index1], input[index2], input[index3], input[i]/result)) {
formular=input[i] + "/(" + formular + ")";
return true;
}
}
}
return false;
}
public static boolean canCalculate(int a, int b, int c, int result) {
int[] input = {a,b,c};
for (int i=0; i<3; i++) {
if (input[i] <= result) {
if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], result-input[i])) {
formular=input[i] + "+(" + formular + ")";
return true;
}
}
if (input[i] > result) {
if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], input[i]-result)) {
formular = input[i] + "-(" + formular + ")";
return true;
}
}
if (result%input[i] == 0 ) {
if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], result/input[i])) {
formular=input[i] + "*(" + formular + ")";
return true;
}
}
if (input[i]%result == 0 ) {
if (canCalculate(input[i+1>2?i-2:i+1], input[i+2>2?i-1:i+2], input[i]/result)) {
formular=input[i] + "/(" + formular + ")";
return true;
}
}
}
return false;
}
public static boolean canCalculate(int a, int b, int result) {
if (a+b==result) {
formular = a + "+" + b ;
return true;
}
if (a*b==result) {
formular = a + "*" + b ;
return true;
}
if (a-b==result) {
formular = a + "-" + b ;
return true;
}
if (a/b==result & a%b == 0) {
formular = a + "/" + b ;
return true;
}
if ((b-a) == result) {
formular = b + "-" + a ;
return true;
}
if (b/a==result & b%a==0) {
formular = b + "/" + a ;
return true;
}
return false;
}
}