微软面试题:3,3,8,8,四个数字任意加减乘除使之最后等于24的编程解决方法
来源:互联网 发布:链家端口费多少 编辑:程序博客网 时间:2024/05/22 07:55
微软面试题:3,3,8,8,四个数字任意加减乘除使之最后等于24的公式
四个数字,四中操作方式,括号的取舍。。
空间复杂度:4!*A(4,3)*C(8) = 12288次,差不多就计算完了。
用java建个Calculator的类,分别设置属性,4个数字用Set装好,操作方式的集合用list装好,暴力解题。
坑爹啊,算法不好没编出来。
找了个js的方案,如下代码copy到记事本,保存为Calculator.html。直接浏览器运行。
<html><head><title>24点</title><script language=javascript>var checkInput=function(){var no1 = parseFloat(document.forms['form']['no1'].value);var no2 = parseFloat(document.forms['form']['no2'].value);var no3 = parseFloat(document.forms['form']['no3'].value);var no4 = parseFloat(document.forms['form']['no4'].value);if(isNaN(no1)||no1<=0||no1>=100){alert("第一个数字非法!,应该输入大于0小于100的数字!");return;}else if(isNaN(no2)||no2<=0||no2>=100){alert("第二个数字非法!,应该输入大于0小于100的数字!");return;}else if(isNaN(no2)||no2<=0||no2>=100){alert("第三个数字非法!,应该输入大于0小于100的数字!");return;}else if(isNaN(no2)||no2<=0||no2>=100){alert("第四个数字非法!,应该输入大于0小于100的数字!");return;}else{calc24([no1,no2,no3,no4]);} };var calc24=function(nums){var sign = ['+','-','*','/'];var expr = new Array(8);for(i=0;i<4;i++){for(j=0;j<4;j++){for(k=0;k<4;k++){for(m=0;m<4;m++){for(n=0;n<4;n++){if(n==m){continue;}for(p=0;p<4;p++){if(p==m||p==n){continue;}for(q=0;q<4;q++){if(q==m||q==n||q==p){continue;}expr[1]=sign[i];expr[6]=nums[p];expr[7]=nums[q];expr[0] = 1;expr[2]=sign[j];expr[3]=sign[k];expr[4]=nums[m];expr[5]=nums[n];//if(eval(expr)==24){if(Math.abs(eval(expr)-24)<0.0000001){expr[0] = 1;alert(tostring(expr)+'=24');return;}expr[0] = 1;expr[2]=sign[j];expr[3]=nums[m];expr[4]=sign[k];expr[5]=nums[n];//if(eval(expr)==24){if(Math.abs(eval(expr)-24)<0.0000001){expr[0] = 1;alert(tostring(expr)+'=24');return;}expr[0] = 1;expr[2]=sign[j];expr[3]=nums[m];expr[4]=nums[n];expr[5]=sign[k];//if(eval(expr)==24){if(Math.abs(eval(expr)-24)<0.0000001){expr[0] = 1;alert(tostring(expr)+'=24');return;}expr[0] = 1;expr[2]=nums[m];expr[3]=sign[j];expr[4]=sign[k];expr[5]=nums[n];//if(eval(expr)==24){if(Math.abs(eval(expr)-24)<0.0000001){expr[0] = 1;alert(tostring(expr)+'=24');return;}expr[0] = 1;expr[2]=nums[m];expr[3]=sign[j];expr[4]=nums[n];expr[5]=sign[k];//if(eval(expr)==24){if(Math.abs(eval(expr)-24)<0.0000001){expr[0] = 1;alert(tostring(expr)+'=24');return;}}}}} }}}alert('无解!'); };var eval=function(expr){var i = expr[0];expr[0]++;if(!isNaN(expr[i])){return expr[i];}if(expr[i]=='+'){return eval(expr)+eval(expr);}else if(expr[i]=='-'){return eval(expr)-eval(expr);}else if(expr[i]=='*'){return eval(expr)*eval(expr);}else if(expr[i]=='/'){return eval(expr)/eval(expr);}else{alert('error!');}};var tostring=function(expr){var i = expr[0];expr[0]++;if(!isNaN(expr[i])){return expr[i];}else{if(i>1){return ('('+tostring(expr)+expr[i]+tostring(expr)+')');}else{return (tostring(expr)+expr[i]+tostring(expr));}}};</script></head><body><form id="form" name="form"><table><tr width="200"><td width="100">第一个数:</td><td widht="130"><input id="no1" name="no1" size="5"></td></tr><tr width="200"><td width="100">第二个数:</td><td widht="130"><input id="no2" name="no2" size="5"></td></tr><tr width="200"><td width="100">第三个数:</td><td widht="130"><input id="no3" name="no3" size="5"></td></tr><tr width="200"><td width="100">第四个数:</td><td widht="130"><input id="no4" name="no4" size="5"></td></tr><tr width="200"><td colspan="2"><input type="button" name="button" value="计算" onclick="javascript:checkInput();"></td></tr></table></form></body></html>
- 微软面试题:3,3,8,8,四个数字任意加减乘除使之最后等于24的编程解决方法
- 微软面试题3
- 剑指offer之面试题45圆圈中最后剩下的数字
- 面试题之不用加减乘除四则运算符号的加法
- 面试题:有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数,并把它们都输出。
- 输出1到N之间所有相加等于M的数字组合(背包问题)求相加为M的所有组合--微软酷派经典面试题
- 面试题45:圆圈中最后剩下的数字
- 面试题45:圆圈中最后剩下的数字
- 面试题49:圆圈中最后剩下的数字*
- 剑指offer-面试题45:圆圈中最后的数字
- 面试题45:圆圈中最后剩下的数字
- 面试题45:圆圈中最后剩下的数字
- 面试题45. 圆圈中最后剩下的数字
- 面试题45:圆圈中最后剩下的数字
- 面试题45—圆圈中最后剩下的数字
- 面试题 45: 圆圈中最后剩下的数字
- 面试题45:圆圈中最后剩下的数字
- 微软面试题 07022012 [3]
- gdb 多线程调试
- VisualVM指定JDK环境启动
- 堆栈顺序实现入栈和出栈等(C)
- 链表(创建,插入,删除和打印输出)
- mini2440裸机之I2C
- 微软面试题:3,3,8,8,四个数字任意加减乘除使之最后等于24的编程解决方法
- 新版IKEEPER去除广告
- 配置cocos2d-iphone
- 黑马程序员 Java 正则表达式中的数量词
- [每日一题] OCP1z0-047 :2013-07-18 时间格式................................................................7
- 【Java】单例设计模式Singleton
- 堆栈链式实现入栈出栈等操作(C)
- 2013-7-18_SSH的开发_JSP调用ACTION的值一些错误
- 深度学习( Deep Learning )软件资源列表