java24点算法
来源:互联网 发布:scp linux 命令 编辑:程序博客网 时间:2024/05/16 08:35
一天,媳妇突然问我24点算法:-5,-5,5,1怎么算,想了想也没想出来,咱是程序猿,这个问题咱能交给电脑解决,于是写了这个也算是鼓励不大上进的自己吧。
public class Test24 { /** * @param args */ public static void main(String[] args) { int[] numO = {12,12,4,9}; double[] num = {numO[0]*1.0,numO[1]*1.0,numO[2]*1.0,numO[3]*1.0}; //进行四则运算处理小数的情况 //先把运算的四位数放到相应的位置(4!种可能) for(int i = 0; i < num.length; i++){ for(int temp1 =1,j = 0; temp1 <= 4; temp1++,j++){ if( j == i) continue; for(int temp2 =1,k = 0; temp2 <= 4; temp2++,k++){ if(k == i || k == j) continue; for(int temp3 =1,l = 0; temp3 <= 4; temp3++,l++){ if(l == i || l == k || l == j) continue; print(new double[]{num[i],num[j],num[k],num[l]}); } } } } } /** * 参与运算的四个数字位置确定了,然后添加三个运算符(4*4*4种可能) * @param num */ public static void print(double[] num){ int[] cal = {1,2,3,4};//分别代表+、-、*、/ String[] calS = {"+","-","*","/"}; for(int a = 0; a < cal.length; a++){ for(int b = 0; b < cal.length; b++){ for(int c = 0; c < cal.length; c++){ //由于运算符的优先级的关系,总共有五种可能 // 1.((a+b)+c)+d 2.(a+(b+c))+d 3.a+((b+c)+d) 4.(a+b)+(c+d) 5.a+(b+(c+d)) double result = num[0]; result = cal(cal(cal(result,num[1],cal[a]),num[2],cal[b]),num[3],cal[c]); if(result == 24.0) System.out.println("(("+(int)num[0]+calS[a]+(int)num[1]+")"+calS[b]+(int)num[2]+")"+calS[c]+(int)num[3]+"="+(int)result); result = num[1]; result = cal(cal(num[0],cal(result,num[2],cal[b]),cal[a]),num[3],cal[c]); if(result == 24.0) System.out.println("("+(int)num[0]+calS[a]+"("+(int)num[1]+calS[b]+(int)num[2]+"))"+calS[c]+(int)num[3]+"="+(int)result); result = num[1]; result = cal(num[0],cal(cal(result,num[2],cal[b]),num[3],cal[c]),cal[a]); if(result == 24.0) System.out.println((int)num[0]+calS[a]+"(("+(int)num[1]+calS[b]+(int)num[2]+")"+calS[c]+(int)num[3]+")="+(int)result); result = num[0]; result = cal(cal(result,num[1],cal[a]),cal(num[2],num[3],cal[c]),cal[b]); if(result == 24.0) System.out.println("("+(int)num[0]+calS[a]+(int)num[1]+")"+calS[b]+"("+(int)num[2]+calS[c]+(int)num[3]+")="+(int)result); result = num[2]; result = cal(num[0],cal(num[1],cal(result,num[3],cal[c]),cal[b]),cal[a]); if(result == 24.0) System.out.println(+(int)num[0]+calS[a]+"("+(int)num[1]+calS[b]+"("+(int)num[2]+calS[c]+(int)num[3]+"))="+(int)result); } } } } /** * 对两个数字进行操作 * 通过这个运算,两个数字的运算无形中就是带括号的 * @param result * @param num * @param cal * @return */ public static double cal(double result,double num,int cal){ switch (cal) { case 1: result += num; break; case 2: result -= num; break; case 3: result *= num; break; case 4: result /= num; break; default: break; } return result; }}
这个24点算法缺点是重复的记录数多,主要是两种情况的重复:1.四个数字中有重复数字时 2.因为运算的事情,容易出现看似重复的情况,不过还好,输入四个数字可以得到解决方案。
第一次写文章,希望大家多多提意见。
0 0
- java24点算法
- java24
- java24天
- 写给JAVA24期
- java24.线程------实现
- java24为什么用抽象类
- Java 对Java24种设计模式的想法和理解
- [修改]24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点算法
- 24点算法
- 最近点对算法
- 24点经典算法
- 不动点算法
- 24点算法实现
- 24点算法2
- 九度oj1170:找最小数
- javescript基础
- 需求:延时执行某个语句
- Android学习九---OpenCV4android org.opencv.feature2d
- 相等的尾数
- java24点算法
- 销售管理
- 使用oschina的git服务器图文流程
- unity3d 界面相关
- Android 获取签名公钥
- Linux ---chroot命令的用处
- 从求数组Top N个数开始说起的求数组的若干问题笔记
- Storm常见问题及解决方法收集
- 写给20几岁的年轻伙伴们!