相当棒的24点游戏算法,Javascript写的,不懂,谁能翻译成C/C++?

来源:互联网 发布:矩阵是什么时候学的 编辑:程序博客网 时间:2024/05/16 03:06

24点算法

游戏地址:http://www.prcer.com/tools/24/24-1.html

 

Javascript代码:

  1. <script language="JavaScript">
  2. // 程序作者:海浪
  3. // 日期:2005-8-13
  4. function lop(j)
  5. {
  6.   if(j>0)
  7.   {
  8.     var ss = lop(j-1);
  9.     var px = "";
  10.     var oo = "$1"+j+"$2";
  11.     for(var k=0; k<=j; k++)
  12.     {
  13.       var re = new RegExp("(//d{"+k+"})(.*?;)","g"); 
  14.       px += ss.replace(re,oo);
  15.     }
  16.     return px;
  17.   }
  18.   else
  19.     return "0;";
  20. }
  21. var gt = lop(3).slice(0,-1).split(";");
  22. for(var i=0; i<gt.length; i++)
  23.   gt[i] = gt[i].split("");
  24. var ot = [];
  25. var op = ["+","-","*","/"];
  26. for(var x=0; x<4; x++)
  27.   for(var y=0; y<4; y++)
  28.     for(var z=0; z<4; z++)
  29.     {
  30.       ot[ot.length] = "( (a"+op[x]+"b)"+op[y]+"c) "+op[z]+"d";
  31.       ot[ot.length] = "( a"+op[x]+"(b"+op[y]+"c)) "+op[z]+"d";
  32.       ot[ot.length] = "a"+op[x]+"( (b"+op[y]+"c)"+op[z]+"d) ";
  33.       ot[ot.length] = "a"+op[x]+"( b"+op[y]+"(c"+op[z]+"d)) ";
  34.       ot[ot.length] = "( a"+op[x]+"b) "+op[y]+"(c"+op[z]+"d)";
  35.    }
  36. ///////////////////////////////////////////////////////////////
  37. var ggcs; 
  38. function ggcsclass()
  39. {
  40.   this.pjys = 0;
  41.   this.zq = 0;
  42.   this.cw = 0;
  43.   this.hl = 0;
  44.   this.gx();
  45. }
  46. function ggcsclass.prototype.gx()
  47. {
  48.   k_pjys.innerText = this.zq==0?0:Math.round(this.pjys/this.zq*100)/100;
  49.   k_zq.innerText = this.zq;
  50.   k_cw.innerText = this.cw;
  51.   k_hl.innerText = this.hl;
  52. }
  53. function ggcsclass.prototype.phl()
  54. {
  55.   this.hl++;
  56.   this.gx();
  57.   k_jg.innerText = "此题被忽略!!";
  58. }
  59. function ggcsclass.prototype.pcw()
  60. {
  61.   this.cw++;
  62.   this.gx();
  63.   k_jg.innerText = "错误!!";
  64. }
  65. function ggcsclass.prototype.pzq()
  66. {
  67.   var d = jcsl.endDate();
  68.   this.pjys += d/1000;
  69.   this.zq++;
  70.   this.gx();
  71.   k_jg.innerText = "正确!用时"+Math.round(d/10)/100+"秒!";
  72. }
  73. window.onload = function()
  74. {
  75.   ggcs = new ggcsclass();
  76. }
  77. ///////////////////////////////////////////////////////////////
  78. var jcsl=null;
  79. function jclass()
  80. {
  81.   this.xpa = [];
  82.   this.ssjg = "";
  83.   this.wx = 1E-10;
  84.   this.date = null;
  85. }
  86. function jclass.prototype.rnd()
  87. {
  88.   for(var ii=0; ii<4; ii++)
  89.     this.xpa[ii] = Math.floor(Math.random()*10)+1;
  90. }
  91. function jclass.prototype.fapai()
  92. {
  93.   for(var ii=0; ii<4; ii++)
  94.     document.getElementById("pk"+ii).innerText = this.xpa[ii];
  95.   this.date = new Date();
  96. }
  97. function jclass.prototype.endDate()
  98. {
  99.   return new Date()-this.date;
  100. }
  101. function jclass.prototype.jw()
  102. {
  103.   var a,b,c,d;
  104.   this.ssjg= "";
  105.   for(var i=0; i<gt.length; i++)
  106.   {
  107.     a=this.xpa[gt[i][0]]-0;
  108.     b=this.xpa[gt[i][1]]-0;
  109.     c=this.xpa[gt[i][2]]-0;
  110.     d=this.xpa[gt[i][3]]-0;
  111.     for(var h=0; h<ot.length; h++)
  112.       if(Math.abs(eval(ot[h])-24)<=this.wx)
  113.         this.jcf(ot[h].replace("a",a).replace("b",b).replace("c",c).replace("d",d));
  114.   }
  115. }
  116. function jclass.prototype.jcf(t)
  117. {
  118.   var str = t;
  119.   var zz1 = t.replace(/[/(/)]/g,"");
  120.   var zz2 = t.replace(/[/(/)] /g,"");
  121.   var zz3 = t.replace(/[/(/)](?! )/g,"");
  122.   if(Math.abs(eval(zz1)-24)<=this.wx)
  123.     str = zz1;
  124.   else if(Math.abs(eval(zz2)-24)<=this.wx)
  125.     str = zz2;
  126.   else if(Math.abs(eval(zz3)-24)<=this.wx)
  127.     str = zz3;
  128.   var res = str.replace(/ /g,"")+"=24/n";
  129.   if(this.ssjg.indexOf(res)==-1)
  130.     this.ssjg += res;
  131. }
  132. function jclass.prototype.scda()
  133. {
  134.   sskgxx.innerText = "全部答案:/n"+this.ssjg;
  135. }
  136. function jclass.prototype.gx(ss)
  137. {
  138.   var sw1 = ss.match(//(/g), sw2 = ss.match(//)/g);
  139.   sw1 = (sw1==null)?0:sw1.length;
  140.   sw2 = (sw2==null)?0:sw2.length;
  141.   if(sw1!=sw2)
  142.     return "左右括号个数不一样";
  143.   if(!/^/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*$/.test(ss))
  144.     return "算术表达式格式不正确";
  145.   var str = "#"+RegExp.$1+"|#"+RegExp.$2+"|#"+RegExp.$3+"|#"+RegExp.$4+"|";
  146.   for(var ii=0; ii<4; ii++)
  147.   {
  148.     var lok = "#"+this.xpa[ii]+"|";
  149.     if(str.indexOf(lok)!=-1)
  150.       str = str.replace(lok,"");
  151.     else
  152.       return "算术表达式中数字不对";
  153.   }
  154.   return "yes";
  155. }
  156. //////////////////////////////////////////////////////////////
  157. function fpaaSystem()
  158. {
  159.   if(jcsl!=null)
  160.     ggcs.phl();
  161.   jcsl = new jclass();
  162.   do  {
  163.     jcsl.rnd();
  164.     jcsl.jw();
  165.   }  while(jcsl.ssjg=="");
  166.   k_jg.innerText = "";
  167.   sskgxx.innerText = "";
  168.   gstext.value = "";
  169.   jcsl.fapai();
  170. }
  171. function fpaaInput()
  172. {
  173.   var ins = prompt("请输入四个数字(如: 5,4,7,10)","");
  174.   if(ins==nullreturn;
  175.   if(!/^/d{1,2},/d{1,2},/d{1,2},/d{1,2}$/.test(ins)) { alert("输入的内容不正确!");return; }
  176.   var vf = jcsl!=null;
  177.   jcsl = new jclass();
  178.   jcsl.xpa = ins.split(",");
  179.   jcsl.jw();
  180.   if(jcsl.ssjg=="") { alert("此题无解!!!");return; }
  181.   if(vf)
  182.     ggcs.phl();
  183.   k_jg.innerText = "";
  184.   sskgxx.innerText = "";
  185.   gstext.value = "";
  186.   jcsl.fapai();
  187. }
  188. function ckda()
  189. {
  190.   if(jcsl==nullreturn;
  191.   ggcs.phl();
  192.   jcsl.scda();
  193.   jcsl=null;
  194. }
  195. function okaa()
  196. {
  197.   if(jcsl==nullreturn;
  198.   var gs = gstext.value;
  199.   var str = jcsl.gx(gs);
  200.   if(str!="yes")
  201.   {
  202.     alert("算式错误:"+str+"!");
  203.     return;
  204.   }
  205.   if(Math.abs(eval(gs)-24)<=jcsl.wx)
  206.     ggcs.pzq();
  207.   else
  208.     ggcs.pcw();
  209.   jcsl.scda();
  210.   jcsl=null;
  211. }
  212. function tocs(n)
  213. {
  214.   if(jcsl==nullreturn;
  215.   gstext.value+=jcsl.xpa[n];
  216. }
  217. </script>

 

谁能翻译下呢?

翻译出来的发邮件给我哦:hm.y@live.cn

原创粉丝点击