java 24点_24点求解(使用加减乘除及括号)

[java]代码库import java.util.Stack;

/**

* 计算24点

*

* @author LiuFengQingYin

*/

public class Game24 {

private final static double _24 = 24;

private final static double A = 1;

private final static double J = 11;

private final static double Q = 12;

private final static double K = 13;

private final static double[] seed = { A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K };

private final double[] pokerFaces = new double[4];

private final Stack partOne = new Stack();

private final Stack partTwo = new Stack();

private final Stack partThree = new Stack();

public boolean hasSolution() {

pokerFaces[0] = seed[(int) Math.round(Math.random() * 12)];

pokerFaces[1] = seed[(int) Math.round(Math.random() * 12)];

pokerFaces[2] = seed[(int) Math.round(Math.random() * 12)];

pokerFaces[3] = seed[(int) Math.round(Math.random() * 12)];

System.out.println("4张牌为: " + pokerFaces[0] + ", " + pokerFaces[1] + ", "

+ pokerFaces[2] + ", " + pokerFaces[3]);

return (_24 == calculateAll(pokerFaces[0], pokerFaces[1], pokerFaces[2], pokerFaces[3]))

|| (_24 == calculateAll(pokerFaces[0], pokerFaces[1], pokerFaces[3], pokerFaces[2]))

|| (_24 == calculateAll(pokerFaces[0], pokerFaces[2], pokerFaces[3], pokerFaces[1]))

|| (_24 == calculateAll(pokerFaces[0], pokerFaces[2], pokerFaces[1], pokerFaces[3]))

|| (_24 == calculateAll(pokerFaces[0], pokerFaces[3], pokerFaces[2], pokerFaces[1]))

|| (_24 == calculateAll(pokerFaces[0], pokerFaces[3], pokerFaces[1], pokerFaces[2]))

|| (_24 == calculateAll(pokerFaces[1], pokerFaces[0], pokerFaces[2], pokerFaces[3]))

|| (_24 == calculateAll(pokerFaces[1], pokerFaces[0], pokerFaces[3], pokerFaces[2]))

|| (_24 == calculateAll(pokerFaces[1], pokerFaces[2], pokerFaces[0], pokerFaces[3]))

|| (_24 == calculateAll(pokerFaces[1], pokerFaces[2], pokerFaces[3], pokerFaces[0]))

|| (_24 == calculateAll(pokerFaces[1], pokerFaces[3], pokerFaces[0], pokerFaces[2]))

|| (_24 == calculateAll(pokerFaces[1], pokerFaces[3], pokerFaces[2], pokerFaces[0]))

|| (_24 == calculateAll(pokerFaces[2], pokerFaces[0], pokerFaces[1], pokerFaces[3]))

|| (_24 == calculateAll(pokerFaces[2], pokerFaces[0], pokerFaces[3], pokerFaces[1]))

|| (_24 == calculateAll(pokerFaces[2], pokerFaces[1], pokerFaces[0], pokerFaces[3]))

|| (_24 == calculateAll(pokerFaces[2], pokerFaces[1], pokerFaces[3], pokerFaces[0]))

|| (_24 == calculateAll(pokerFaces[2], pokerFaces[3], pokerFaces[0], pokerFaces[1]))

|| (_24 == calculateAll(pokerFaces[2], pokerFaces[3], pokerFaces[1], pokerFaces[0]))

|| (_24 == calculateAll(pokerFaces[3], pokerFaces[0], pokerFaces[2], pokerFaces[1]))

|| (_24 == calculateAll(pokerFaces[3], pokerFaces[0], pokerFaces[1], pokerFaces[2]))

|| (_24 == calculateAll(pokerFaces[3], pokerFaces[1], pokerFaces[0], pokerFaces[2]))

|| (_24 == calculateAll(pokerFaces[3], pokerFaces[1], pokerFaces[2], pokerFaces[0]))

|| (_24 == calculateAll(pokerFaces[3], pokerFaces[2], pokerFaces[0], pokerFaces[1]))

|| (_24 == calculateAll(pokerFaces[3], pokerFaces[2], pokerFaces[1], pokerFaces[0]));

}

private double calculateAll(double i, double l, double m, double n) {

if (_24 == i + calculateLast3(_24 - i, l, m, n)) {

partOne.push(i);

partOne.push('+');

return _24;

}

if (_24 == i - calculateLast3(i - _24, l, m, n)) {

partOne.push(i);

partOne.push('-');

return _24;

}

if (_24 == calculateLast3(i + _24, l, m, n) - i) {

partThree.push('-');

partThree.push(i);

return _24;

}

if (_24 == i * calculateLast3(_24 / i, l, m, n)) {

partOne.push(i);

partOne.push('*');

return _24;

}

if (_24 == i / calculateLast3(i / _24, l, m, n)) {

partOne.push(i);

partOne.push('/');

return _24;

}

if (_24 == calculateLast3(i * _24, l, m, n) / i) {

partThree.push('/');

partThree.push(i);

return _24;

}

return Double.NaN;

}

private double calculateLast3(double i, double l, double m, double n) {

if (i == l + calculateLast2(i - l, m, n)) {

partTwo.push('(');

partTwo.push(l);

partTwo.push('+');

partThree.push(')');

return i;

}

if (i == l - calculateLast2(l - i, m, n)) {

partTwo.push('(');

partTwo.push(l);

partTwo.push('-');

partThree.push(')');

return i;

}

if (i == calculateLast2(l + i, m, n) - l) {

partTwo.push('(');

partThree.push('-');

partThree.push(l);

partThree.push(')');

return i;

}

if (i == l * calculateLast2(i / l, m, n)) {

partTwo.push(l);

partTwo.push('*');

return i;

}

if (i == l / calculateLast2(l / i, m, n)) {

partTwo.push('(');

partTwo.push(l);

partTwo.push('/');

partThree.push(')');

return i;

}

if (i == calculateLast2(l / i, m, n) / l) {

partTwo.push('(');

partThree.push('/');

partThree.push(l);

partThree.push(')');

return i;

}

return Double.NaN;

}

private double calculateLast2(double d, double m, double n) {

if (d == m + n) {

partThree.push('(');

partThree.push(m);

partThree.push('+');

partThree.push(n);

partThree.push(')');

return d;

}

if (d == m - n) {

partThree.push('(');

partThree.push(m);

partThree.push('-');

partThree.push(n);

partThree.push(')');

return d;

}

if (d == m * n) {

partThree.push(m);

partThree.push('*');

partThree.push(n);

return d;

}

if (d == m / n) {

partThree.push('(');

partThree.push(m);

partThree.push('/');

partThree.push(n);

partThree.push(')');

return d;

}

return Double.NaN;

}

public String getSolution() {

return (partOne.toString() + partTwo.toString() + partThree.toString())

.replace("[", "").replace("]", "").replace(",", "");

}

/**

* 测试入口

*

* @param args

*/

public static void main(String[] args) {

Game24 game = new Game24();

System.out.println(game.hasSolution() == true ? "解为: " + game.getSolution() : "无解");

}

}

694748ed64b9390909c0d88230893790.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值