Java24点
计算24是流行的扑克游戏.其方法是任意取出4张牌,A J Q K 王牌 算 1,其它牌按点数计算,花色不计.
目标是通过加、减、乘、除和括号最终算出24.设计一个程序,输入4个数字(1~10)
则列出所有可能计算结果为24的方案.要求:
方案不能重复(加法乘法交换律等算不同方案).
计算中局部可以为分数,结果为整数即可(如 3 3 7 7 算法:(3 + 3/7)*7)
如果没有找到方案输出:
public class Test2
{
public void Fun(int a,int b,int c,int d)
{
int op1,op2,op3 = 0;
String x = null,y = null,z = null;
double n = 0;
for (op1 = 0; op1 < 4; op1++)
{
switch (op1)
{
case 0:
n = a + b;
x = "+";
break;
case 1:
n = a - b;
x = "-";
break;
case 2:
n = a * b;
x = "*";
break;
case 3:
n = a / b;
x = "/";
break;
}
for (op2 = 0; op2 < 4; op2++)
{
switch (op2)
{
case 0:
n = n + c;
y = "+";
break;
case 1:
n = n - c;
y = "-";
break;
case 2:
n = n * c;
y = "*";
break;
case 3:
n = n / c;
y = "/";
break;
}
for (op3 = 0; op3 < 4; op3++)
{
switch (op3)
{
case 0:
n = n + d;
z = "+";
break;
case 1:
n = n - d;
z = "-";
break;
case 2:
n = n * d;
z = "*";
break;
case 3:
n = n / d;
z = "/";
break;
}
if (n == 24.0)
{
System.out.println("(" + "(" + a + x + b + ")" + y + c
+ ")" + z + d + ")");
System.out.println("---------------------------");
}
}
}
}
}
public void Scan()
{
int n = 0;
while (n < 10000)
{
int a = (int) ((Math.random() * 9) + 1);
int b = (int) ((Math.random() * 9) + 1);
int c = (int) ((Math.random() * 9) + 1);
int d = (int) ((Math.random() * 9) + 1);
Fun(a,b,c,d);
n++;
}
}
/**
* @param args
*/
public static void main(String[] args)
{
Test2 t = new Test2();
t.Fun(1,2,3,4);
t.Fun(4,6,9,5);
t.Scan();
}
}
注:有的结果正确,有的不正确,这是为啥?
例如:
((4*2)*3)-5)
---------------------------
((4*2)*3)/5)
但是不是24
作业帮用户2016-12-07举报