同事给我出了一道算24的智力题,{5,5,5,1} 算24.最后没有算出来。
写了一个能得出答案的程序,不过,里面会有很多重复的答案。。
public class Suan24 {
public static void main(String args[]) {
float a[] = { 5, 5, 5, 1 };
pp(a, "");
}
/**
* 参数a为传入的数组,后面的sf为输出内容。
*/
public static void pp(float a[], String sf) {
int lev = a.length;
if (lev == 1) {
if (a[0] == 24) {
System.out.println(sf);
System.out.println("成功");
}
} else {
// 这两个for循环是随机取出两个值,为了后边的计算。
for (int i = 0; i < lev; i++) {
for (int j = 0; j < lev; j++) {
if (i == j) {
continue;
}
// 这个数组是为了存储没有计算过的数字
float[] aa = new float[lev - 1];
int tem = 0;
for (int z = 0; z < lev; z++) {
if (z == i || z == j) {
continue;
}
aa[tem] = a[z];
tem++;
}
// 这一步是将取出的计算的两个数字计算,将计算后的数字和前面没有计算的数字组到一起。
aa[tem] = a[i] + a[j];
// 这里是继续循环,数组的长度少了一位。
pp(aa, sf + a[i] + "+" + a[j] + "=" + aa[tem] + "-----");
// 和上面一样。
aa[tem] = a[i] * a[j];
pp(aa, sf + a[i] + "*" + a[j] + "=" + aa[tem] + "-----");
aa[tem] = a[i] - a[j];
pp(aa, sf + a[j] + "-" + a[i] + "=" + aa[tem] + "-----");
aa[tem] = a[i] / a[j];
pp(aa, sf + a[i] + "/" + a[j] + "=" + aa[tem] + "-----");
}
}
}
}
}
最后算出结果了。
1.0/5.0=0.2-----5.0-0.2=4.8-----4.8*5.0=24.0
现在在想怎么才可以让结果没有重复的呢?