> 백엔드 개발 > PHP 튜토리얼 > 一个强悍的算24点游戏的PHP程序

一个强悍的算24点游戏的PHP程序

WBOY
풀어 주다: 2016-06-23 13:59:28
원래의
1143명이 탐색했습니다.

算24点游戏大家都玩过吧,那么怎么用程序来计算4个数的随意运算组合得到的结果是24呢?比如,5,5,5,1这四个数,如何凑才能得到结果为24?下面介绍一个很强悍的程序,可以将符合条件的所有组合列出来。

<?phpset_time_limit(0); $values = array(5, 5, 5, 1); $result = 24;$list = array();echo "<pre class="brush:php;toolbar:false">"; 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; }?>
로그인 후 복사


程序运行结果为:

Array(    [0] => (5-1/5)*5    [1] => 5*(5-1/5))
로그인 후 복사


 

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿