天天看點

用加減乘除計算24點的程式

同僚給我出了一道算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
           

 現在在想怎麼才可以讓結果沒有重複的呢?