在网上搜索了一下,已经有不少的实现的例子了,不过发现都不全面
我搜索到的都有一个误区,即:
四个数:a,b,c,d   四个运算符用?代替
第一步运算一定是从四个数中选两个出来进行四则运算如:a?b=e
第二步就是求:e?c?d的结果实际上,上面的e?c,如果用除法运算,就是e/c,至少漏了c/e的结果
e/c和c/e的结果是完全不一样的象网上那些算法就无法得出:8/(3-8/3)的结果我思考了半天,没有好的思路,大家有吗?
最好有代码

解决方案 »

  1.   

    e / c 和c /e 两种情况只需考虑一种,别外一种没意义。
    其实算法中,只要e /c 不能得到整数就将被忽略。
      

  2.   

    不赞同楼上的,我个人觉得只要能得出24的结果,就应该算对Console.WriteLine((double)8/((double)3-(double)8/(double)3) );
    这句是能够得出24的结果的,只是遍历时,不是很容易遍历到这个地方
    showjancn(难得一剑) 
    e / c 和c /e 两种情况只需考虑一种,别外一种没意义。
    其实算法中,只要e /c 不能得到整数就将被忽略。
    -----------------------------------------------------
    你这种想法好像很多人都是这么想的,但是如果非要考虑得不到整数的情况呢?
    而且8/(3-8/3)这个,据说是微软的一道面试题。
      

  3.   

    虽然电脑计算中会产生精确值的误差,但通过对近似值的取整,还是可以得到 8/(3-8/3) = 24 的结果的。设计时稍微注意一下就是了。至于漏掉的情形,完全可以将原程序改写一下,把全部的排列组合都考虑进去。
    比如:
    ------
    第一步运算一定是从四个数中选两个出来进行四则运算如:a?b=e
    第二步就是求:e?c?d的结果
    ------那么,可以在第一步做个分支,一个原样a?b=e,一个是b?a=f
    第二步应该是第一步的递归,不要e?c?d,那样漏掉的更多。
      

  4.   

    http://www.cnblogs.com/xiaoq/archive/2006/10/24/538636.html我写的.呵呵还不是很完善,有些可以四则运算法则交换的表达式没完全去除掉不过你说的 3388倒是可以算出一种结果
      

  5.   

    jimh(Jimmy) ( ) 信誉:100    Blog  2006-11-29 10:27:11  得分: 0  
     
     
       24点有一个很重要的规则,就是所有的计算结果都是正整数或0
      
     
    不对
    比如 2 4 10 10
    就要 (4/10+2)×10
      

  6.   

    现在已经把程序做出来了,不过重复的情形太多,还要好好优化才行我的思路是先进行四个数的位置的组合,下面是可能的组合:
    arr[0],arr[1],arr[2],arr[3]
    arr[0],arr[1],arr[3],arr[2]
    arr[0],arr[3],arr[2],arr[1]
    arr[0],arr[3],arr[1],arr[2]
    arr[0],arr[2],arr[3],arr[1]
    arr[0],arr[2],arr[1],arr[3]arr[1],arr[0],arr[2],arr[3]
    arr[1],arr[0],arr[3],arr[2]
    arr[1],arr[3],arr[2],arr[0]
    arr[1],arr[3],arr[0],arr[2]
    arr[1],arr[2],arr[3],arr[0]
    arr[1],arr[2],arr[0],arr[3]arr[2],arr[1],arr[0],arr[3]
    arr[2],arr[1],arr[3],arr[0]
    arr[2],arr[3],arr[0],arr[1]
    arr[2],arr[3],arr[1],arr[0]
    arr[2],arr[0],arr[3],arr[1]
    arr[2],arr[0],arr[1],arr[3]arr[3],arr[1],arr[2],arr[0]
    arr[3],arr[1],arr[0],arr[2]
    arr[3],arr[0],arr[2],arr[1]
    arr[3],arr[0],arr[1],arr[2]
    arr[3],arr[2],arr[0],arr[1]
    arr[3],arr[2],arr[1],arr[0]然后针对上面的每一种组合,比如:arr[0],arr[1],arr[2],arr[3]
    1)计算arr[0]和arr[1]的6种运算结果k1:a+b,a-b,a*b,a/b,    b-a, b/a
    2)计算k1和arr[2]的6种运算结果k2
    3)计算k2和arr[3]的6种运算结果k3
    如果(k3*10)取整=240 (乘10是为了防止24.01和23.99的情况)
    就输出
      

  7.   

    虽然程序作成了,但是还是存在一些问题,大家可以看看:
    http://beinet.cn/blog/default.aspx?tid=38
      

  8.   

    我的bolg  http://blog.csdn.net/coowoo