同僚給我出了一道算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
現在在想怎麼才可以讓結果沒有重複的呢?