• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用javascript編寫“24點”游戲

    發表于:2007-05-25來源:作者:點擊數: 標簽:
    html head /head script language=' java script' var debug = false; var steps = new Array(); var ResultSet = new Array(); ResultSet.Add = function(newResult) { for (var i = 0; i ResultSet.length; i++) { if (ResultSet[i] == newResult) { retur

    <html>
    <head>
    </head>
    <script language='javascript'>
    var debug = false;
    var steps = new Array();
    var ResultSet = new Array();
    ResultSet.Add = function(newResult)
    {
     for (var i = 0; i < ResultSet.length; i++) 
     {
      if (ResultSet[i] == newResult)
      {
       return;
      }
     }
     ResultSet.push(newResult);
    }
    ResultSet.toString = function()
    {
     var msg = "";
     for (var i = 0; i < ResultSet.length; i++) 
     {
      msg += ResultSet[i] + "=24\n";
     }
     msg += "計算結束,共得到"+ResultSet.length+"個不同結果";
     return msg;
    }
    function Assert(flag)
    {
     if (!flag)
     {
      throw new Error('Assertion failed!');
     }
    }
    Array.prototype.clone = function()
    {
     return this.slice(0);
    }
    function calcul(stack,oper)
    {
     Assert(oper == '+' || oper == '-' || oper == '*' || oper == '/');
     var lift = new Array();
     lift[0] = stack.pop()-0;
     lift[1] = stack.pop()-0;
     switch(oper)
     {
      case '+': stack.push(lift[1] + lift[0]);
          break;
      case '-': stack.push(lift[1] - lift[0]);
          break;
      case '*': stack.push(lift[1] * lift[0]);
          break;
      case '/': stack.push(lift[1] / lift[0]);
          break;
     }
     return lift;
    }
    function parseExp()   //由逆波蘭式構造出表達式
    {
     var stack = new Array();
     var exprs = new Array();

     for (var i = 0; i < steps.length; i++)
     {
      if (!isNaN(steps[i]))
      {
       stack.push(steps[i]);
       exprs.push(steps[i].toString());
      }
      else
      {
       var oper1 = exprs.pop();
       var oper2 = exprs.pop();
       var lift = calcul(stack, steps[i]);
       if (steps[i] == '*' || steps[i] == '+')    //規定較大的數出現在*和+的左邊,以避免出現過多重復的結果
       {
        if (lift[0] > lift[1])
        {
         var tmp = oper1;
         oper1 = oper2;
         oper2 = tmp;
        }
       }
       var subexpr = "(" + oper2 + ")" + steps[i] + "(" + oper1 + ")";  //判斷是否要添加括號
       var subexpr1 = oper2 + steps[i] + oper1;
       var subexpr2 = "(" + oper2 + ")" + steps[i] + oper1;
       var subexpr3 =  oper2 + steps[i] + "(" + oper1 + ")";
       if (Math.abs(eval(subexpr) - eval(subexpr1)) < 0.0001) subexpr = subexpr1;
       else if (Math.abs(eval(subexpr) - eval(subexpr2)) < 0.0001) subexpr = subexpr2;
       else if (Math.abs(eval(subexpr) - eval(subexpr3)) < 0.0001) subexpr = subexpr3;

        exprs.push(subexpr);
      }
     }
     return exprs[0];
    }

    function playCards(stack, cards)
    {
     if (debug) alert(stack + ":" + cards);
     if (stack.length == 1 && cards.length == 0)
     {
      if(Math.abs(stack[0] - 24) < 0.0001)
      {
       ResultSet.Add(parseExp());
      }
      return; //計算結束,輸出計算結果
     }
     var newCards = null;
     var newStack = null;

     for(var i = 0 ; i < cards.length; i++)
     {
      var distinctCard = true;
      for (var j = 0; j < i; j++)
      {
       if (cards[j] == cards[i])
       {
        distinctCard = false;
        break;
       }
      }
      if (distinctCard)
      {
       newCards = cards.clone();
       newStack = stack.clone();
       newCards.splice(i,1);
       newStack.push(cards[i]);
       steps.push(cards[i]);
       playCards(newStack, newCards);
       steps.pop(cards[i]);
      }
     }
     
     calCard(stack.clone(),cards.clone(),'+');
     calCard(stack.clone(),cards.clone(),'-');
     calCard(stack.clone(),cards.clone(),'*');
     calCard(stack.clone(),cards.clone(),'/');
    }

    function calCard(stack,cards,oper)
    {
     if (stack.length < 2)
     {
      return;
     }
     steps.push(oper);
     calcul(stack,oper);
     playCards(stack, cards);
     steps.pop(oper);
    }

    function Play()
    {
     var stack = new Array();
     var cards = new Array();
     Result.value = "";
     ResultSet.length = 0;
     for (var i = 0; i < iCards.length; i++)
     {
      if (iCards[i].value == "" || isNaN(iCards[i].value))
      {
       alert('輸入格式不正確');
       iCards[i].focus();
       return false;
      }
      cards.push(iCards[i].value);
     }
     
     playCards(stack, cards);
     Result.value += ResultSet.toString();
    }
    </script>
    <body>
             <br/>
     <input id = 'iCards' style='width:80px'/>
     <input id = 'iCards' style='width:80px'/>
     <input id = 'iCards' style='width:80px'/>
     <input id = 'iCards' style='width:80px'/>
     <input type='button' value='計算' onclick="Play();"/><br/><br/>
     計算結果:<br/>
     <textarea id = 'Result' style='width:440px;height:200px'></textarea>
    </body>
    </html>

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>