24点算法有问题

算法|问题|算法

http://community.csdn.net/Expert/topic/3735/3735144.xml?temp=8.680362E-02

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Javascript版 v1.0</title>
<META HTTP-EQUIV="REFRESH" CONTENT=10; URL=*.*>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
</head>

<body>
<br>
计算24点(加、减、乘、除、括号) Javascript版 v1.0<br><br>
<br><br><br><br>
<form>
<div align=center>
时间限制(10秒)<br><br>
<input type="text" name="fa" value="<%=l1%>" size="10">
<input type="text" name="fb" value="<%=l2%>" size="10">
<input type="text" name="fc" value="<%=l3%>" size="10">
<input type="text" name="fd" value="<%=l4%>" size="10">
<br><br><input type="button" name="btn" onclick="javascript:funCount()" value="查看答案 ">

</div></form>

<script language="JavaScript">
function log(str)
{
document.write("<br>"+str);
}

//生成计算表达式
function genExpress(exp,a,b,c,d,m1,m2,m3)
{
var
exp=exp.replace("a",a);
exp=exp.replace("b",b);
exp=exp.replace("c",c);
exp=exp.replace("d",d);
exp=exp.replace("m1",m1);
exp=exp.replace("m2",m2);
exp=exp.replace("m3",m3);
return exp;
}

var answer = new Array();//正确答案的表达式
var counter = 0;//答案的个数

//测试表达式是否正确
function test(expn,a,b,c,d,m1,m2,m3)
{
var exp;
var ret;
exp = genExpress(expn,a,b,c,d,m1,m2,m3);//生成计算表达式
eval("ret = "+exp);
if ( ret - 24 < 0.1 && ret - 24 >= 0 )
{
exp = exp.replace(";","");
exp = replaceAll(exp,"*","×");
exp = replaceAll(exp, "/","÷");
var have = false;
for ( var i=0; i<counter; i++)
{
if ( exp == answer[i] )
{
have = true;
break;
}
}
if ( !have )
{
answer[counter] = exp;
counter++;
log("<font color=red><b>"+counter+":  "+exp+"</b></font>");
}
}
}

function replaceAll (streng, soeg, erstat)
{
var st = streng;
if (soeg.length == 0)
return st;
var idx = st.indexOf(soeg);
while (idx >= 0)
{
st = st.substring(0,idx) + erstat + st.substr(idx+soeg.length);
idx = st.indexOf(soeg);
}
return st;
}

var n = new Array();//四个数字

//接收四个输入框的数字,调用主程序
function funCount()
{
n[0] = document.forms[0].fa.value;
n[1] = document.forms[0].fb.value;
n[2] = document.forms[0].fc.value;
n[3] = document.forms[0].fd.value;
if ( n[0] > 0 && n[1] > 0 && n[2] > 0 && n[3] > 0 && n[0] < 14 && n[1] < 14 && n[2] < 14 && n[3] < 14 )
{
log("<font size=5><b>"+n[0]+", "+n[1]+", "+n[2]+", "+n[3]+"的24点答案:</b></font><br>");
log("<input type='button' ><br>");
funMain();
if ( counter == 0 )
{
log("没有答案!");
}
}
else
{
alert("输入错误!");
}
}

//主程序
function funMain()
{
var m = new Array();
//四种运算符
m[0] = "+";
m[1] = "-";
m[2] = "*";
m[3] = "/";

//11种表达式
var exp1 = "a m1 b m2 c m3 d;";
var exp2 = "(a m1 b) m2 c m3 d;";
var exp3 = "(a m1 b m2 c) m3 d;";
var exp4 = "((a m1 b) m2 c) m3 d;";
var exp5 = "(a m1 (b m2 c)) m3 d;";
var exp6 = "a m1 (b m2 c) m3 d;";
var exp7 = "a m1 (b m2 c m3 d);";
var exp8 = "a m1 ((b m2 c) m3 d);&qu

时间: 2024-09-19 20:29:00

24点算法有问题的相关文章

24点算法问题

问题描述 用穷举法可以找到所有符合条件的解,但是其中很多是重复的,比如说(2+7)+(3*5)和2+(7+(3*5))其实是一样的,算法该怎么写,才能过滤掉这些重复的解?请高手指点一下,谢谢! 解决方案 解决方案二:可以用循环来写的.具体的写法加Q:294824894解决方案三:当括号内运算符级别高于(等于)外边运算符级别的时候就可以把括号去掉解决方案四:求共享可以发到邮箱470061032@qq.com解决方案五:4个数只要满足一次等于24,算法就可以退出了.怎么会有重复.解决方案六:你们讲啥

24点算法之我见

之前发了一篇博文"24点的所有组合的解法",有人颇不以为然.我想说的是,发这篇文章是说明我可以用计算机求出24点的所有组合的解法.而在实际的运用中,如果要使用24点的算法有时还不见得利用查表法来得简单和快速.毕竟,要短时间内写出正确的算法并验证,也不是一件很容易的事.   24点游戏的规则:给定4个正整数(1到10),利用加减乘除运算,得出运算结果为24的运算式 例如: 1,2,3,4--(1+2+3)*4=24 1,5,5,5--(5-1/5)*5=24   网上比较常见的24点算法

php数字游戏 计算24算法_php实例

算法思路:把每一个数字看做一个独立的数学表达式,表达式之间加上标点符号组合成新表达式,一共组合4次,表达式之间的所有组合可以通过递归来实现. 代码如下: 复制代码 代码如下: <?php /** * A 24 maker * @version 1.0.0 * @author laruence<laruence at yahoo.com.cn> * @copyright (c) 2009 http://www.laruence.com */ class TwentyFourCal { pu

《多核与GPU编程:工具、方法及实践》----2.3 分解模式

2.3 分解模式 设计过程最困难同时也最关键的部分无疑是分解过程,即确定可以并发执行的计算.虽然任务图法是最常用的,但开发者无法从中获取以往的经验,这时就需要模式.Mattson等人[33]列出了若干分解模式(在他们的书中表示为"algorithm structure design space patterns"), 该参考文献包含了工作负载被分解并最终分配到并行或多核平台各个节点上的基本方法.图2-4显示了能得到6个模式之一的决策树. 上一节提到了两类分解,即功能分解和域分解,现在又

设计模式之禅之设计模式-模板方法模式

一:模板方法模式的定义        --->定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.        --->模板方法模式确实非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式.其中,AbstractClass叫做抽象模板,它的方法分为两类:        ● 基本方法                基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用.        ● 模板方法   

24点扑克牌游戏的算法实现

二十四点扑克牌游戏大概所有人都玩过,规则非常简单,随机抽出四张牌,由1到9中的数字组成(当然也可以扩展到任意整数),然后利用加减乘除以及括号组成一个算术表达式,计算这个表达式的结果是否能够为24(或任意整数).看到这个题的第一反应就是利用穷举法来做,也就是建立一个搜索树,把所有的可能枚举出来,然后检查每种可能是否结果可以为24.基于这种思想,我们可以把问题分成三个步骤: 首先可以列出4个整数的所有排列,也就是求集合中元素的所有排列的问题,眼熟了吧?相信很多人都看过这个问题,一般的方式是用函数的递

[华为机试练习题]44.24点游戏算法

题目 注意: 6 + 2 * 4 + 10 = 24 不是一个数字一个数字的计算 代码 /*--------------------------------------- * 日期:2015-07-03 * 作者:SJF0115 * 题目:24点游戏算法 * 来源:华为机试练习题 -----------------------------------------*/ #include <iostream> #include <string> #include <vector&

【24】六大常用排序算法

一. 冒泡排序 1. 思想:利用比较相邻的两个元素,发现两个数前者大于后者则进行交换,这样每一轮可以把最大数放到后面,只要做n轮便可以使得序列有序. 2. 举例,例如序列 8 7 3 4 5 0 1     第一轮:8 7 3 4 5 0 1     8 7 3 4 5 0 1 -> 7 8 3 4 5 0 1     7 8 3 4 5 0 1 -> 7 3 8 4 5 0 1     7 3 8 4 5 0 1 -> 7 3 4 8 5 0 1     7 3 4 8 5 0 1 -

求按百分比抽取数据算法

问题描述 求按百分比抽取数据算法 我有个需求 要求用百分比抽取数据以达到数据审阅的目的 我做了一个简单的程序但达不到要求 <?php header('Content-Type: text/html; charset=utf-8'); //抽取算法 for($kou=1;$kou<=100;$kou++){ $kou_count=0; for($i=1;$i<=100;$i++){ $key=($i)%(100/$kou); if( intval( $key ) == 0){ //echo