用加减乘除计算24点的程序
程序员文章站
2022-04-30 17:17: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
现在在想怎么才可以让结果没有重复的呢?
上一篇: memcached 的简单总结
下一篇: 《晨间日记的奇迹》读书笔记