较难!
谁写出来就 cool 了

解决方案 »

  1.   

    http://search.csdn.net/expert/topic/156/156716.htm
      

  2.   

    <html>
    <head>
    <title></title>
    </head>
    <body>
    <SCRIPT LANGUAGE="javaScript" >
    function tdisoper(f0,f1,f2,f3)
    {
    this[0]=f0;
    this[1]=f1;
    this[2]=f2;
    this[3]=f3;
    }
    disoper=new tdisoper("-","+","/","*");function oper(f,m,n)
    {
    if (f==3) return(m*n);
    if (f==2) return(m/n);
    if (f==1) return(parseFloat(m)+parseFloat(n));
    if (f==0) return(m-n);
    }function tb(i1,i2,i4,i8)
    {
    this[1]=i1;
    this[2]=i2;
    this[4]=i4;
    this[8]=i8;
    }function valid(F)
    {
    n=F.count1.options[F.count1.selectedIndex].value;
    if (isNaN(F.a1.value)){alert("必须输入整数!");    F.a1.focus();    return(false);}
    if (isNaN(F.a2.value)){alert("必须输入整数!");    F.a2.focus();    return(false);}
    if (isNaN(F.a4.value)){alert("必须输入整数!");    F.a4.focus();    return(false);}
    if (isNaN(F.a8.value)){alert("必须输入整数!");    F.a8.focus();    return(false);}
    b=new tb(F.a1.value,F.a2.value,F.a4.value,F.a8.value);
    k=0;
    F.text.value="";for (i1=1;i1<=8;i1*=2)
     for (i2=1;i2<=8;i2*=2)
       for (i3=1;i3<=8;i3*=2)
         for (i4=1;i4<=8;i4*=2)
           {
            if ((i1|i2|i3|i4)!=0xf) continue;
              for (f1=0;f1<=3;f1++)
                for (f2=0;f2<=3;f2++)
                  for (f3=0;f3<=3;f3++)
                      {
    m=oper(f3,oper(f2,oper(f1,b[i1],b[i2]) ,b[i3] ) ,b[i4]);
      if (Math.abs(m-24)<1e-5 ) {
      F.text.value=F.text.value+"(("+b[i1]+disoper[f1]+b[i2]+")"+disoper[f2]+b[i3]+")"+disoper[f3]+b[i4]+"\n";
      if ((n!=0)&&(++k>=n)) return(false);
    }
    m=oper(f1, b[i1], oper(f3, oper(f2,b[i2],b[i3]) ,b[i4]) );
      if (Math.abs(m-24)<1e-5){
      F.text.value=F.text.value+b[i1]+disoper[f1]+"(("+b[i2]+disoper[f2]+b[i3]+")"+disoper[f3]+b[i4]+")\n";
      if ((n!=0)&&(++k>=n)) return(false);
    }m=oper(f3,oper(f1,b[i1], oper(f2,b[i2],b[i3]) ),b[i4]);
     if (Math.abs(m-24)<1e-5){
      F.text.value=F.text.value+"("+b[i1]+disoper[f1]+"("+b[i2]+disoper[f2]+b[i3]+"))"+disoper[f3]+b[i4]+"\n";
      if ((n!=0)&&(++k>=n)) return(false);
    }m=oper(f1, b[i1], oper(f2, b[i2], oper(f3, b[i3], b[i4]) ) );
     if (Math.abs(m-24)<1e-5){
      F.text.value=F.text.value+b[i1]+disoper[f1]+"("+b[i2]+disoper[f2]+"("+b[i3]+disoper[f3]+b[i4]+"))\n";
      if ((n!=0)&&(++k>=n)) return(false);
    }m=oper(f2,oper(f1,b[i1],b[i2]), oper(f3,b[i3],b[i4]) );
      if (Math.abs(m-24)<1e-5){
      F.text.value=F.text.value+"("+b[i1]+disoper[f1]+b[i2]+")"+disoper[f2]+"("+b[i3]+disoper[f3]+b[i4]+")\n";
      if ((n!=0)&&(++k>=n)) return(false);
    }
               }
          }
    F.text.value=F.text.value+"----END----\n"
    return(false);
    }function newin(s,target,ww,hh) 
    { window.open(s,target,"menubar=0,resizable=1,scrollbars=1,width="+ww+",height="+hh)}
    </SCRIPT>
    <FORM  onsubmit="return valid(this)">请输入四个整数:<BR>
    <INPUT TYPE="text" NAME="a1" MAXLENGTH="6" size=5>
    <INPUT TYPE="text" NAME="a2" MAXLENGTH="6" size=5>
    <INPUT TYPE="text" NAME="a4" MAXLENGTH="6" size=5>
    <INPUT TYPE="text" NAME="a8" MAXLENGTH="6" size=5><SELECT NAME="count1" > 
    <OPTION VALUE="1" selected=on> 只找一个答案
    <OPTION VALUE="5" > 最多找5个
    <OPTION VALUE=10 > 最多找10个
    <OPTION VALUE=0 > 找全部答案
    </select>
    <BR>
     <INPUT TYPE=submit  VALUE="计算24点"><BR>
    <HR>
    <TEXTAREA NAME="text" ROWS="15" COLS="30"></TEXTAREA>
    </FORM>
    <HR>
    <FORM><INPUT TYPE="button"  VALUE="返回" onClick="history.back()"></FORM>
    </body>
    </html>
      

  3.   

    netdust (ND)  
    你说的是哪个贴子,给个连接.
      

  4.   

    帖子:http://search.csdn.net/expert/topic/156/156716.htm
    -----
    帖子里好象也有提到什么树,但时我看不懂
    我把我的程序帖出来,你们看看,给点建议好吗。
      

  5.   

    不好意思,我的注释都成乱码了
    =============
    <html>
    <head>
    <title></title>
    <Script Language="JavaScript">
    //main&ordm;&macr;&Ecirc;&yacute;&ETH;è&Ograve;&ordf;&para;&Ocirc;&sup2;&Icirc;&Ecirc;&yacute;&frac12;&oslash;&ETH;&ETH;&frac14;ì&sup2;&acirc;var operStr="+-*"; //&iquest;&Eacute;&Ecirc;&sup1;&Oacute;&Atilde;&micro;&Auml;&Ocirc;&Euml;&Euml;&atilde;·&ucirc;&ordm;&Aring;&pound;¨&sup3;&yacute;&ordm;&Aring;&Agrave;&yacute;&Iacute;&acirc;&pound;&copy;
    var n=0; //&acute;&cent;&acute;&aelig;&micro;÷&Oacute;&Atilde;&acute;&Icirc;&Ecirc;&yacute;
    var g_resultStr=''; //&acute;&cent;&acute;&aelig;·&ucirc;&ordm;&Iuml;&micro;&Auml;&Euml;&atilde;·¨
    var g_toN; //&Auml;&iquest;±ê&Ecirc;&yacute;
    var g_smpStr; //&Oacute;&Atilde;&Oacute;&Uacute;&acute;&cent;&acute;&aelig;&frac14;ò&raquo;&macr;&micro;&Auml;&Euml;&atilde;·¨
    var g_smpN; //&Oacute;&Atilde;&Oacute;&Uacute;&acute;&cent;&acute;&aelig;&frac14;ò&raquo;&macr;&micro;&Auml;&sup3;&Igrave;&para;&Egrave;//&Ouml;÷&ordm;&macr;&Ecirc;&yacute;
    // &ETH;è&Ograve;&ordf;&frac14;&Oacute;&Egrave;&euml;&Ntilde;é&Ouml;¤&sup2;&iquest;·&Ouml;
    function f_main()
    {
    g_resultStr=''; //&Ccedil;&aring;&iquest;&Otilde;&Euml;&atilde;·¨
    n=0; //&micro;÷&Oacute;&Atilde;&acute;&Icirc;&Ecirc;&yacute;&Ouml;&Atilde;&Aacute;&atilde;
    g_toN=arguments[0]; //&Eacute;è&Ouml;&Atilde;&Auml;&iquest;±ê&Ecirc;&yacute;
    var strTmp;

    strTmp='f_howtoN('+arguments[1];
    for (var i=2;i<arguments.length;i++)
    strTmp+=','+arguments[i];
    strTmp+=')';
    eval(strTmp); //&micro;÷&Oacute;&Atilde;&Egrave;&iexcl;&micro;&Atilde;&Euml;&atilde;·¨&micro;&Auml;&ordm;&macr;&Ecirc;&yacute;

    var aryTmp=g_resultStr.split(';');
    g_resultStr='';
    for (var i=0;i<aryTmp.length-1;i++)
    {
    g_smpStr=aryTmp[i];
    g_smpN=0;
    f_smp();
    g_resultStr+=g_smpStr+'\n';
    }
    return g_resultStr;
    }//&Egrave;&iexcl;&micro;&Atilde;&Euml;&atilde;·¨&micro;&Auml;&ordm;&macr;&Ecirc;&yacute;
    // &raquo;&sup1;&ETH;è&Ograve;&ordf;&frac14;ì&sup2;é
    function f_howtoN()
    {
    n++; //&micro;÷&Oacute;&Atilde;&acute;&Icirc;&Ecirc;&yacute;&frac14;&Oacute;1
    var varTmp='';

    if (arguments.length<1) return false; //·&Ccedil;&Otilde;&yacute;&sup3;&pound;&Ccedil;é&iquest;&ouml;
    if (arguments.length==1)
    {
    try {varTmp=eval(arguments[0]);} //·&Agrave;&Ouml;&sup1;&Ograve;ì&sup3;&pound;
    catch(e) {return false;}

    if (varTmp==g_toN) //&sup3;&Eacute;&sup1;&brvbar;&micro;&Auml;&Euml;&atilde;·¨
    {
    g_resultStr+=arguments[0]+';'; //&acute;&cent;&acute;&aelig;&Euml;&atilde;·¨
    return true;
    }
    else //&Ecirc;§°&Uuml;&micro;&Auml;&Euml;&atilde;·¨
    return false;
    }

    //&Ecirc;&sup1;&Oacute;&Atilde;±é&Agrave;ú·¨&Euml;&Ntilde;&Euml;÷&Euml;&atilde;·¨
    //+-*&para;&Ocirc;&Euml;&sup3;&ETH;ò&Icirc;&THORN;&sup1;&Oslash;
    for (var i=0;i<arguments.length;i++)
    {
    for (var ii=i+1;ii<arguments.length;ii++)
    {
    for (var iii=0;iii<operStr.length;iii++)
    {
    varTmp='f_howtoN(\'('+arguments[i]+operStr.substr(iii,1)+arguments[ii]+')\'';
    for (var iiii=0;iiii<arguments.length;iiii++)
    if (iiii!=i && iiii!=ii) varTmp+=',\''+arguments[iiii]+'\'';
    varTmp+=')';
    eval(varTmp); //&micro;&Yacute;&sup1;é&micro;÷&Oacute;&Atilde;
    }
    }
    }
    //&sup3;&yacute;&ordm;&Aring;&para;&Ocirc;&Euml;&sup3;&ETH;ò&Oacute;&ETH;&sup1;&Oslash;
    for (var i=0;i<arguments.length;i++)
    {
    for (var ii=0;ii<arguments.length;ii++)
    {
    if (i==ii) continue;
    varTmp='f_howtoN(\'('+arguments[i]+'/'+arguments[ii]+')\'';
    for (var iiii=0;iiii<arguments.length;iiii++)
    if (iiii!=i && iiii!=ii) varTmp+=',\''+arguments[iiii]+'\'';
    varTmp+=')';
    eval(varTmp); //&micro;&Yacute;&sup1;é&micro;÷&Oacute;&Atilde;
    }
    }

    return;
    }//&frac14;ò&raquo;&macr;&micro;&Auml;&ordm;&macr;&Ecirc;&yacute;
    function f_smp()
    {
    if(g_smpStr.match(/\(/g)==null) return; //&frac14;ò&raquo;&macr;&Iacute;ê&sup3;&Eacute;
    if(g_smpStr.match(/\(/g).length<=g_smpN) return; //&frac14;ò&raquo;&macr;&Iacute;ê&sup3;&Eacute;

    //&raquo;&ntilde;&micro;&Atilde;&Ograve;&ordf;&frac14;ò&raquo;&macr;&sup2;&iquest;·&Ouml;&micro;&Auml;&AElig;&eth;&Ouml;&sup1;&micro;&Oslash;&Ouml;·
    var p1=p2=0;
    for (var i=0;i<g_smpStr.length;i++)
    {
    if (g_smpStr.substr(i,1)=='(') p1++;
    if (p1==g_smpN+1) {p1=i;break;}
    }
    for (var i=p1;i<g_smpStr.length;i++)
    {
    if (g_smpStr.substr(i,1)=='(') p2++;
    if (g_smpStr.substr(i,1)==')')
    {
    p2--;
    if (p2==0) {p2=i;break;}
    }
    }

    //&raquo;&ntilde;&micro;&Atilde;&frac14;ò&raquo;&macr;&sup2;&iquest;·&Ouml;&Iacute;&acirc;&sup2;&iquest;&micro;&Auml;&Oacute;&Aring;&Iuml;&Egrave;&frac14;&para;
    var outPri,outWay,inPri;
    if (p1!=0 && p2!=g_smpStr.length)
    {
    if (f_pri(g_smpStr.substr(p1-1,1),g_smpStr.substr(p2+1,1))==-1)
    {
    outWay=2;
    outPri=g_smpStr.substr(p2+1,1);
    }
    else
    {
    outWay=1;
    outPri=g_smpStr.substr(p1-1,1);
    }
    }
    else
    {
    if (p1==0 && p2==g_smpStr.length)
    {
    outWay=0;
    outPri=' ';
    }
    else
    {
    if (p1!=0)
    {
    outWay=1;
    outPri=g_smpStr.substr(p1-1,1);
    }
    else
    {
    outWay=2;
    outPri=g_smpStr.substr(p2+1,1);
    }
    }
    }

    //&raquo;&ntilde;&micro;&Atilde;&frac14;ò&raquo;&macr;&sup2;&iquest;·&Ouml;&micro;&Auml;&Oacute;&Aring;&Iuml;&Egrave;&frac14;&para;
    var n=0;
    var charTmp;
    inPri='*';
    for (var i=p1+1;i<p2;i++)
    {
    charTmp=g_smpStr.substr(i,1);
    if (charTmp=='(') n++;
    if (n==0 && f_pri(charTmp,inPri)==-1) inPri=charTmp;
    if (charTmp==')') n--;
    }

    //&cedil;ù&frac34;&Yacute;&Ccedil;é&iquest;&ouml;&frac12;&oslash;&ETH;&ETH;&frac14;ò&raquo;&macr;
    if (outWay==0 || f_pri(inPri,outPri)==1 || (f_pri(inPri,outPri)==0 && (outWay==2 || '+*'.indexOf(outPri)!=-1)))
    g_smpStr=g_smpStr.substr(0,p1)+g_smpStr.substr(p1+1,p2-p1-1)+g_smpStr.substr(p2+1,g_smpStr.length-p2-1);
    else
    g_smpN++; //±&pound;&Aacute;&ocirc;&micro;&Auml;&Agrave;¨&ordm;&Aring;&Ecirc;&yacute;&frac14;&Oacute;1

    f_smp();//&micro;&Yacute;&sup1;é&micro;÷&Oacute;&Atilde;
    return;
    }//&Oacute;&Aring;&Iuml;&Egrave;&frac14;&para;±&Egrave;&frac12;&Iuml;&micro;&Auml;&ordm;&macr;&Ecirc;&yacute;
    //0:&Iacute;&not;&frac14;&para;&pound;&raquo;1:&cedil;&szlig;&frac14;&para;&pound;&raquo;-1:&micro;&Iacute;&frac14;&para;
    function f_pri(p1,p2)
    {
    //&Oacute;&Aring;&Iuml;&Egrave;&frac14;&para;+-*/_
    if ((' +-'.indexOf(p1)!=-1 && ' +-'.indexOf(p2)!=-1) || ('*/'.indexOf(p1)!=-1 && '*/'.indexOf(p2)!=-1))
    return 0;
    else
    {
    if (' +-'.indexOf(p1)!=-1)
    return -1;
    else
    return 1;
    }
    }
    </Script>
    </head>
    <body onload="area.value=f_main(3,1,1,2,1);">
    <textarea name="area" rows=20 width=500></textarea>
    </body>
    </html>
      

  6.   

    http://www.csdn.net/develop/read_article.asp?id=16048