计算24点代码javascript

24点游戏介绍:
    给出4个1-9之间的整数,其中每个数字只能且必须使用一次;任意使用 + - * / ( ),构造出一个表达式,使得最终结果为24,这就
是常见的算24点的游戏。本文给出的代码数字范围不限于1-9,个数也不限于4个,类型也可不为整数,结果也可以自己指定,不限于24。但是随着数字个数的增多或数字大小的增大,所用的时间也越长。

 1 ar opts   = ["+","*","-","-","/","/"];
 2 function process(nums, len, aim)
 3 {
 4   for(var i = 0; i < len; i++) { 
 5     for(var j = i+1; j < len; j++) {
 6       var numij = [nums[i],nums[j]];
 7       nums[j] = nums[len - 1];
 8       for(var k = 0; k < 6; k++){                
 9         nums[i] = '(' + numij[k%2+ opts[k] + numij[(!(k%2)*1)] + ')';                
10         if(process(nums, len-1, aim)) {
11           return true;
12         }                
13       }
14       nums[i] = numij[0]; 
15       nums[j] = numij[1];
16     } 
17   }
18   return (len == 1&& (Math.abs((new Function("return" + nums[0])()) - aim) < 0.0000001); 
19 }

上面的十几行代码已经完成了24点的计算,如果得到了可以计算出24点的表达式则返回 true,并将表达式保存在 nums[0] 中,如果给出的数字找不到可以计算出24点的表达式,就返回 false。下面的函数是获取正确的表达式或给出无法计算的提示。

function getexp(aim, nums){
  
if(process(nums, nums.length, aim)){
    
return nums[0].substring(1,nums[0].length-1);
  }
else{
    
return "No expression = " + aim; 
  }
}

你可以自己编写html测试,或者在这里下载:https://files.cnblogs.com/JoeDZ/game24.rar 不过这里对输入做了限制,只能输入整数。

posted @ 2008-10-11 14:53  NanKe Sir's Blog  阅读(900)  评论(0编辑  收藏  举报