php计算24点游戏

求: 三个5,一个1组成的数学表达式的结果=24,   结果:(5-1/5)*5=24

<?php

 set_time_limit(0);
 $values = array(1, 5, 5, 5);
 $result = 24;

 $list = array();

 echo "<pre>";
 makeValue($values);
 print_r($list);

 function makeValue($values, $set=array())
 {
  $words = array("+", "-", "*", "/");
  if(sizeof($values)==1)
  {
   $set[] = array_shift($values);
   return makeSpecial($set);
  }
  foreach($values as $key=>$value)
  {
   $tmpValues = $values;
   unset($tmpValues[$key]);
   foreach($words as $word)
   {
    makeValue($tmpValues, array_merge($set, array($value, $word)));
   }
  }
 }
 
 function makeSpecial($set)
 {
  $size = sizeof($set);

  if($size<=3 || !in_array("/", $set) && !in_array("*", $set))
  {
   return makeResult($set);
  }

  for($len=3; $len<$size-1; $len+=2)
  {
   for($start=0; $start<$size-1; $start+=2)
   {
    if(!($set[$start-1]=="*" || $set[$start-1]=="/" || $set[$start+$len]=="*" || $set[$start+$len]=="/"))
     continue;
    $subSet = array_slice($set, $start, $len);
    if(!in_array("+", $subSet) && !in_array("-", $subSet))
     continue;
    $tmpSet = $set;
    array_splice($tmpSet, $start, $len-1);
    $tmpSet[$start] = "(".implode("", $subSet).")";
    makeSpecial($tmpSet);
   }
  }
 }

 function makeResult($set)
 {
  global $result, $list;
     $str = implode("", $set);
  @eval("\$num=$str;");
  if($num==$result && !in_array($str, $list))
   $list[] = $str;
 }

?>

时间: 2024-11-06 09:37:14

php计算24点游戏的相关文章

穷举法解24点游戏

24点游戏: 输入:n1,n2,n3,n4 输出:若能通过+ - * / 和括号混合运算,得到运算结果为24,则输出一个对应的运算表达式 穷举法: 对4个数字全排列有4!=24种排列. 4个数字共需要3个运算符,同一个运算符可以重复出现,则有4x4x4=64种情况. 对于4个数字而言,共有以下5中加括号的方式: (A(B(CD))),(A((BC)D)),((AB)(CD)),((A(BC))D),(((AB)C)D). 所以遍历的表达式最多有24*64*5=7680种.即使采用逆波兰表达式,总

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

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

javascript 24点游戏代码_javascript技巧

24点游戏 程序作者:海浪 日期:2005-8-13 平均用时:秒  正确:  错误:  忽略:           

PS4首发护航24款游戏

索尼的新一代游戏机PS4已正式上市,让我们来看看外媒为首发护航的24款游戏给出的评价: 1.<愤怒的小鸟星球大战>:PS4版拥有20个独占关卡和有趣的多人模式,只是50美元的售价相比免费手游版多少有点得不偿失. 2.<刺客信条4黑旗>:尽管剧情故事很烂,但好在画面华丽,玩法成熟,玩家更像是海盗而不是刺客. 3.<战地4>:游戏画面效果是系列有史以来最好的,新模式的加入也很好玩,关卡进化系统可让地形发生动态变化,而PS4版和PC版一样支持64人对战. 4.<黑光惩罚

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

编程之美:24点游戏

一.问题描述 给玩家4张牌,每张牌牌面值在1~13之间,允许其中有数值相同的牌.采用加.减.乘.除四则运算,允许中间运算存在小数,并且可以使用括号,但每张牌只能使用一次,尝试构造一种表达式,使其运算结果为24. 如 输入:3 3 7 7 输出:(((3)/(7))+(3))*(7) 二.程序实现原理 遍历所有可能的组合,直到找到一个符合条件的组合或者遍历所有情况没有找到满足的组合,具体详见代码注释 三.程序基本实现 #include<iostream> #include<string&g

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

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

Java编写的24点纸牌游戏_java

任意4个1-13数字,加减乘除计算24点. 实现原理: 1)排列组合4个数字 2)计算每次排列组合的可能性 Cal24.java import java.util.HashSet; import java.util.Set; public class Cal24 { private static final double precision = 0.00001; private static final int target = 24; public String[] execute(Strin

JavaScript基础实例:如何计算24点

javascript <html>    <head>    <title>24点</title>    <meta name="author" content="dlpower@163.com">    <meta http-equiv="Content-Type" content="text/html; charset=GB2312">    <