编写一个组合24的游戏程序。由程序的参数给定四个从0到9的整数。程序可以对这四个数字进行任意排列并任意进行四则运算(加减乘除与括号)。如果能够得到24,则输出具体的表达式,否则,输出“无解”。

解决方案 »

  1.   

    没错,都是穷举法。我这有javascript的代码。
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    (s=String.prototype).r=s.replace;
    q :
    for(i in a=[8,6,1,9])
    {
      for(j in a)
      {
        for(k in a)
        {
          for(l in a)
          {
            if(i!=j&&i!=k&&i!=l&&j!=k&&j!=l&&k!=l)
            {
              for(m in b=["(x+y)","(x-y)","(x*y)","(x/y)","(y-x)","(y/x)"])
              {
                for(n in b)
                {
                  for(o in b)
                  {
                    if((d=Math.abs)(eval(s=b[o].r(x="x",b[n].r(x,p=b[m].r(x,a[i]).r(y="y",a[j])).r(y,g=a[k])).r(y,h=a[l]))-24)<0.01||d(eval(s=b[n].r(x,p).r(y,b[o].r(x,g).r(y,h)))-24)<0.01)
                    {
                      alert(s+"=24");
                      break q;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    alert("ok");
    //-->
    </SCRIPT>
      

  2.   

    有没有人转换成java的啊,这个我看的晕晕的,谢谢了啊
      

  3.   

    for(m in b=["(x+y)","(x-y)","(x*y)","(x/y)","(y-x)","(y/x)"])
              {
                for(n in b)
                {
                  for(o in b)
                  {
                    if((d=Math.abs)(eval(s=b[o].r(x="x",b[n].r(x,p=b[m].r(x,a[i]).r(y="y",a[j])).r(y,g=a[k])).r(y,h=a[l]))-24)<0.01||d(eval(s=b[n].r(x,p).r(y,b[o].r(x,g).r(y,h)))-24)<0.01)
                    {
                      alert(s+"=24");
                      break q;
    这几句翻译一下,有高手吗?