3388=24及24点游戏的穷举算法
偶尔看到一题:用3 3 8 8 四个数和加减乘除组合得出24,前提是用完这四个数,几年没好好思考了,偶算了半天没答案,就写了个穷举算法,呵呵,貌似结果只有一种啊,各位兄台还有其它答案么?
package my;public class DigitalPuzzle {private float[] operands=new float[]{3.0f, 3.0f, 8.0f, 8.0f};private int[] operators=new int[]{0, 1, 2, 3};//0 1 2 3 stand for + - * /private float[][] allSeries=new float[4][4*4*4*4]; //四个操作数所有可能的组合private int[][] allOperats=new int[3][4*4*4]; //三个操作符所有可能的组合private int validSeriesSum=0; //有效的操作数组合个数// 穷举所有的操作数排列及操作符排列public void init(){int i,j,m,n;for(i=0;i<4;i++)for(j=0;j<4;j++)for(m=0;m<4;m++){allOperats[0][i*16+j*4+m]=operators[i];allOperats[1][i*16+j*4+m]=operators[j];allOperats[2][i*16+j*4+m]=operators[m]; }int kk=0;for(i=0;i<4;i++)for(j=0;j<4;j++)for(m=0;m<4;m++)for(n=0;n<4;n++)if(i!=j && i!=m && i!=n && j!=m && j!=n && m!=n){allSeries[0][kk]=operands[i];allSeries[1][kk]=operands[j];allSeries[2][kk]=operands[m];allSeries[3][kk]=operands[n];kk++; }validSeriesSum=kk;}public float Calcu(float op1, float op2, int op){switch(op){case 0: return op1+op2;case 1: return op1-op2;case 2: return op1*op2;case 3: return op1/op2;default:return 0.0f;}}// 打印计算结果public String show(float op[], int opt[], int result){String[] opts=new String[opt.length]; for(int i=0;i<opt.length;i++)switch(opt[i]){case 0: opts[i]="+";break;case 1: opts[i]="-";break;case 2: opts[i]="*";break;case 3: opts[i]="/";break;default:opts[i]="wrong";}return op[3]+opts[2]+"("+op[2]+opts[1]+"("+op[1]+opts[0]+op[0]+")) = "+result;}// 穷举过程public void find(){ for(int i=0;i<validSeriesSum;i++)for(int j=0;j<4*4*4;j++){ float tmp1=Calcu(allSeries[1][i], allSeries[0][i],allOperats[0][j]);float tmp2=Calcu(allSeries[2][i], tmp1, allOperats[1][j]);float tmp3=Calcu(allSeries[3][i], tmp2, allOperats[2][j]);if(Math.abs(tmp3-24.0f)<0.01f)System.out.println(show(new float[]{allSeries[0][i],allSeries[1][i],allSeries[2][i],allSeries[3][i]},new int[]{allOperats[0][j],allOperats[1][j],allOperats[2][j]}, 24));} }public static void main(String[] args){DigitalPuzzle dp=new DigitalPuzzle();dp.init();dp.find();}
}
打印结果: 8.0/(3.0-(8.0/3.0)) = 24
3388=24及24点游戏的穷举算法相关推荐
- 青蛙跳跃对调位置游戏的穷举解决算法
游戏在这里青蛙跳跃小游戏,让左边的青蛙和右边的青蛙对调位置.左边和右边各有三只青蛙,中心处有一个空位.每次可以跳一个青蛙,要么向前跳一格,要么跨过前方的青蛙跳一格,青蛙不能重叠,不能往回跳. 下面是解 ...
- 百钱百鸡php穷举法,PHP经典题:百钱百鸡问题(穷举算法)
PHP经典题:百钱百鸡问题(穷举算法) 百钱百鸡问题: 已知:公鸡5元一只,母鸡3元一只,小鸡一元3只 现用100元钱买了100只鸡,问:公鸡母鸡小鸡各几只? --请考虑尽可能高效的方法 思路: 如果 ...
- 穷举算法——奶牛碑文(cow)
- 穷举算法--奶牛碑文(cow) 题目描述 小伟暑假期间到大草原漫游,在一块石头上发现了一些有趣的碑文.碑文似乎是一个神秘古老的语言,只包括三个大写字母 C.O 和W. 尽管小伟看不懂,但是令他高兴 ...
- 简析穷举算法,及其简单应用
简析穷举算法,及其简单应用 穷举概述 穷举法又称列举法,其基本思想是逐一列举问题所涉及的所有情况. 穷举法常用于解决"是否存在"或"有多少种可能"等问题. 应用 ...
- java穷举密码_穷举算法和递推算法(Java)
穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...
- 穷举算法(鸡兔同笼问题)
穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下: (1)对于一种可能的情况,计算其结果. (2)判断结果是否满足要求,如果不满足则进行执行第(1)步来搜索下一个可能的情况:如果 ...
- 旅行商问题穷举算法c语言,什么是旅行商问题——算法NP、P、NPC知识
旅行商问题 旅行商问题所描述的是这样一个场景: 有一个商品推销员,要去若干个城市推销商品.该推销员从一个城市出发,需要经过所有城市后,回到出发地.每个城市之间都有道路连通,且距离各不相同,推销员应该如 ...
- 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。
摘要: 转载请注明来自stanlysheng--talk is cheap, show me your code.http://www.cnblogs.com/stanly/ .谢谢.此文我也在CSD ...
- c语言穷举算法 枚举法,c语言枚举法 穷举法 ppt课件
枚举法 穷举法 笨人之法 把所有可能的情况一一测试 筛选出符合条件的各种结果进行输出 分析 这是个不定方程 三元一次方程组问题 三个变量 两个方程 x y z 1005x 3y z 3 100设公鸡为 ...
最新文章
- Java的最大优势还是跨平台么?
- 什么是WLAN射频?
- Win2003 安全设置大全
- 12_Android中HttpClient的应用,doGet,doPost,doHttpClientGet,doHttpClient请求,另外借助第三方框架实现网络连接的应用,
- python如何连接自己电脑服务器_Python远程连接windows服务器并上传数据
- 设计模式2:工程模式(1)
- 初学者必知的Python中优雅的用法
- 【简报】帮助你免费制作单页面个人网站
- js微信抢红包脚本代码_如何利用JavaScript来实现微信抢红包功能的示例代码
- C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10
- 计算机四级网络工程师考过指南
- ClustalX进行多序列比对流程
- h5课件制作_H5课件制作
- 程序员的外包经验:印度、中国和菲律宾
- 助力自己在金融领域中更加游刃有余的人大与加拿大女王大学金融硕士项目你读到了吗?
- 苹果手机如何换行打字_苹果手机如何检查手机是否是真机
- 乡郎桑黄:揭秘吃神农架野生桑黄后居然改变了生活态度
- nasdaq qcom_高通(NASDAQ:QCOM)应该关注台湾半导体制造公司
- 真正的360桌面助手/护眼助手绿色免安装版
- 如何利用大数据分析技术预测员工离职?
热门文章
- 单应性矩阵Homography计算和优化
- php 导出导入excel
- PCF8951读程序
- 计算机音译英语单词,[听单词] 计算机专业英语词汇音频102,计算机英语单词MP3...
- c语言的结构体与指针的区别,C语言 结构体与结构体指针用法总结
- 有没有大佬知道怎么把dcm格式核磁图像,进行3D分割
- python resample函数_Python pandas.DataFrame.resample函数方法的使用
- Verilog实现超前进位加法器
- 中职计算机专业信息安全教案,中职信息技术教案.docx
- 鼠标之父:恩格尔巴特于2013年7月3日去世