4个10以内的数字,通过四则运算得到24

请你用java写一个方法,判断给定的4个数字,每个数值在1~10之间,通过+ - * / 运算,结果为24,每个数字必须使用且只能使用一次。


网友提供的穷举法
  1. public class T {
  2.   int[] can = new int[4];
  3.   public static void main(String[] args) {
  4.     T tf = new T(3457);
  5.     System.out.println(tf.getResult());
  6.   }
  7.   public T(int a, int b, int c, int d) {
  8.     can[0] = a;
  9.     can[1] = b;
  10.     can[2] = c;
  11.     can[3] = d;
  12.   }
  13.   public String getResult() {
  14.     double result1 = 0;
  15.     double result2 = 0;
  16.     double result3 = 0;
  17.     for (int i = 0; i < 4; i++) {
  18.       for (int j = 0; j < 4; j++) {
  19.         for (int k = 0; k < 4; k++) {
  20.           if (i != j) {
  21.             result1 = cal(can[i], can[j], k);
  22.             for (int l = 0; l < 4; l++) {
  23.               for (int m = 0; m < 4; m++) {
  24.                 if (i != l && j != l) {
  25.                   result2 = cal(result1, can[l], m);
  26.                   for (int n = 0; n < 4; n++) {
  27.                     for (int o = 0; o < 4; o++) {
  28.                       if (i != n && j != n && l != n) {
  29.                         result3 = cal(result2, can[n], o);
  30.                         if (result3 == 24) {
  31.                           return result(can[i], k, can[j], m, can[l], o, can[n]);
  32.                         }
  33.                       }
  34.                     }
  35.                   }
  36.                 }
  37.               }
  38.             }
  39.           }
  40.         }
  41.       }
  42.     }
  43.     return null;
  44.   }
  45.   private String result(int can1, int op1, int can2, int op2, int can3, int op3, int can4) {
  46.     return "" + can1 + convert(op1) + can2 + convert(op2) + can3 + convert(op3) + can4;
  47.   }
  48.   private String convert(int opr) {
  49.     if (opr == 0) {
  50.       return "+";
  51.     } else if (opr == 1) {
  52.       return "-";
  53.     } else if (opr == 2) {
  54.       return "*";
  55.     } else if (opr == 3) {
  56.       return "/";
  57.     }
  58.     return "";
  59.   }
  60.   private double cal(double a, double b, int opr) {
  61.     if (opr == 0) {
  62.       return a + b;
  63.     } else if (opr == 1) {
  64.       return a - b;
  65.     } else if (opr == 2) {
  66.       return a * b;
  67.     } else if (opr == 3) {
  68.       return a / b;
  69.     }
  70.     return 0;
  71.   }
  72. }
运算结果
3*4+5+7












<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值