微软面试题: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="计算" οnclick="javascript:checkInput();"></td>
</tr>
</table>
</form>
</body>
</html>

微软面试题:3,3,8,8,四个数字任意加减乘除使之最后等于24的编程解决方法相关推荐

  1. 《视觉slam十四讲》ch4学习笔记——sophus库使用的问题及解决方法

    在看完<视觉slam十四讲>第四章李群和李代数后,准备调试相应的代码,但是出现了各种各样的问题,但最后还是万幸,成功完成了调试.在这里记录一下期间遇到的问题和相应的解决方法以及最后的感想. ...

  2. Python学习日记:求解由四个数字组成的四位数个数

    看见这个问题时,我们很容易想到我们学习过的排列组合知识点:显然用四个数字组成四位数(这些四位数互不相同)就是一个关于排列的问题:用数学的方法可以知道.那么怎么用Python运行解决呢?这就是本次学习日 ...

  3. 变态而有趣的微软面试题及答案

    变态而有趣的微软面试题及答案 变态而有趣的微软面试题及答案 文章目录 变态而有趣的微软面试题及答案 第一组 第二组 第三组 第四组 第五组 第六组 答案 最近和一些朋友讨论面试题比较多,呵呵,这里收藏 ...

  4. 微软面试题:五个囚犯抓绿豆

    微软面试题:五个囚犯抓绿豆 一.题目描述 二.题目分析 三.逻辑推理 四.概率分析 五.分析结果 一.题目描述 5个囚犯,分别按1-5号在装有100颗绿豆的麻袋抓绿豆,规定每人至少抓一颗,而抓得最多和 ...

  5. 答与微博前端教主在吃饭时讨论到的一道微软面试题

    加引号是因为我不知道是否真是微软面试题.题目是这样的: 有一车在某无限长公路上行驶,其起始位置和单位时间内速度均为有限大整数(正负不确定), 现有一仪器,在每一时间单位内可以探测1次车是否在指定位置, ...

  6. 微软面试题:正则表达式提取链接地址

    写出正则表达式,从一个字符串中提取链接地址.比如下面字符串中 "IT面试题博客中包含很多  <a href=http://hi.baidu.com/mianshiti/blog/cat ...

  7. 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字

    /******************************************************************************* 文 件 名 : test100.cpp ...

  8. 微软面试题之数字谜题方案

    微软面试题之数字谜题方案 设有两个自然数m,n,2〈=m<=99. S先生知道这两数的和s,P先生知道这两数的积p.他们两人进行了如下的对话: S:我知道你不知道这两个数是什么,但我也不知道. ...

  9. 微软面试题之数字谜题 (转)

    微软面试题之数字谜题 (转)[@more@] 设有两个自然数m,n,2〈=m<=99. S先生知道这两数的和s,P先生知道这两数的积p.他们两人进行了如下的对话: S:我知道你不知道这两个数是什 ...

最新文章

  1. WINCE6.0+S3C2443的启动过程---eboot5
  2. Qt 原理-MOC(2) QObject.h
  3. [Leetcode] Bus Routes 公交线路
  4. 企业怎样做好计算机应急响应工作
  5. 深信服上网管理设备恢复控制台密码
  6. HDOJ 1012-1020
  7. mysql数据库应用的权限层级_MySQL数据库的用户权限管理
  8. python selenium系列(六)实战技巧之弹框处理
  9. 【计算机网络】——流量控制与可靠传输机制
  10. 用 Python 写软件原来这么简单
  11. 分享丨对医学图像分割中的置信度进行量化
  12. 一款短小精悍的日志分析工具web_log_analyse
  13. 1.1 print输出语句(Python)
  14. matlab 倒位序fft程序,[转载]MATLAB的一个FFT程序
  15. 2020 iOS拼多多(多多进宝)APP端接入,打开拼多多商品详情与授权
  16. 2020中兴捧月算法大赛 埃德加考特派 区域优胜奖源代码
  17. V4L2文档翻译(十一)
  18. 强化学习: 贝尔曼方程与马尔可夫决策过程
  19. 你的爬虫是否徘徊在违法的边缘?
  20. 做一个植物大战僵尸有多难?python教你几步搞定

热门文章

  1. mipi两线接口_MIPI CSI-2 接口标准
  2. 计算机控制交通灯实验报告,PLC实验专用周实验报告 交通灯
  3. PCF8951读程序
  4. vue框架搭建前端登录界面
  5. 教你一招,让你摆脱ftp工具上因为权限不足而删不了想删除文件夹的苦恼
  6. 我开的游戏经常被攻击该怎么办,云服务器陷入黑洞了要怎么处理,有没有什么好的办法彻底解决攻击
  7. WinForm实现Rabbitmq官网6个案例-Publishe/Subscribe
  8. 电工学复习【9】-- 触发器和时序逻辑电路
  9. 定位于超流线纯电轿跑 欧拉闪电猫惊艳上市
  10. 【九章算法】北美求职之面试题目