eimhee 发表于 2013-1-27 04:45:09

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

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


网友提供的穷举法
<div class="highlighter">
[*]public class T {
[*]  int[] can = new int;
[*]<span />
[*]  public static void main(String[] args) {
[*]    T tf = new T(3, 4, 5, 7);
[*]    System.out.println(tf.getResult());
[*]  }
[*]<span />
[*]  public T(int a, int b, int c, int d) {
[*]    can = a;
[*]    can = b;
[*]    can = c;
[*]    can = d;
[*]  }
[*]<span />
[*]  public String getResult() {
[*]    double result1 = 0;
[*]    double result2 = 0;
[*]    double result3 = 0;
[*]    for (int i = 0; i < 4; i++) {
[*]      for (int j = 0; j < 4; j++) {
[*]        for (int k = 0; k < 4; k++) {
[*]          if (i != j) {
[*]            result1 = cal(can, can, k);
[*]            for (int l = 0; l < 4; l++) {
[*]              for (int m = 0; m < 4; m++) {
[*]                if (i != l && j != l) {
[*]                  result2 = cal(result1, can, m);
[*]                  for (int n = 0; n < 4; n++) {
[*]                    for (int o = 0; o < 4; o++) {
[*]                      if (i != n && j != n && l != n) {
[*]                        result3 = cal(result2, can, o);
[*]                        if (result3 == 24) {
[*]                          return result(can, k, can, m, can, o, can);
[*]                        }
[*]                      }
[*]                    }
[*]                  }
[*]                }
[*]              }
[*]            }
[*]          }
[*]        }
[*]      }
[*]    }
[*]    return null;
[*]  }
[*]<span />
[*]  private String result(int can1, int op1, int can2, int op2, int can3, int op3, int can4) {
[*]    return "" + can1 + convert(op1) + can2 + convert(op2) + can3 + convert(op3) + can4;
[*]  }
[*]<span />
[*]  private String convert(int opr) {
[*]    if (opr == 0) {
[*]      return "+";
[*]    } else if (opr == 1) {
[*]      return "-";
[*]    } else if (opr == 2) {
[*]      return "*";
[*]    } else if (opr == 3) {
[*]      return "/";
[*]    }
[*]    return "";
[*]  }
[*]<span />
[*]  private double cal(double a, double b, int opr) {
[*]    if (opr == 0) {
[*]      return a + b;
[*]    } else if (opr == 1) {
[*]      return a - b;
[*]    } else if (opr == 2) {
[*]      return a * b;
[*]    } else if (opr == 3) {
[*]      return a / b;
[*]    }
[*]    return 0;
[*]  }
[*]}
页: [1]
查看完整版本: 4个10以内的数字,通过四则运算得到24