菜鸟堂

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

       (续昨天)老久没来博客园了,前几天和同事一起出去玩,一个女生给我出了个题,有四个数,分别是3,3,8,8,如何才能让他们经过+, -, *, / 四则运算最后结果得到24,我想了半天没想出来,汗!!!

不过这不是俺的作风啊,于是厚着脸皮吹牛说:“哥明天写程序给你算出来!”,经过一天的努力,终于写出来个支持n位数计算结果的算法,不过自认为效率很差,想看看大家的代码,然后改一改,欢迎一起来讨论啊!

     由于本人水平有限,所以代码可读性可能很差,大家不要着急看代码,我先解释一下,我一共写了三个类,第一个类产生运算的结果队列,第二个类声明结果队列中节点的数据结构,里面有三项,第一项是Operand,操作数组成的队列,例如【8,3】&【5,3】&【8,8】;第二项是操作符号组成的队列,例如 1&0&0,其中1代表减号,0代表加号(看过程序就知道了);第三项是结果集,例如经过上面的运算 8-3+3+8,最后结果集中存的就只有16这个最后结果了 。

    好了,本程序照理说应该可以算五位数六位数的加减乘除,但是现实中只有小于等于四位的可以成功,原因是四位数加减乘除产生的结果有C42×C32×6×6×6个结果,如果出去除数为零的情况,resultlist这个队列中要有三千多个值,要是五位可能几十万个,六位就有三千多万个,晕!堆栈溢出了!那位高手可以指点一下我改进改进算法,呵呵~

ResultList类

 

 

ResultNode 类

 

 

测试类
posted on 2009-04-30 21:11  舞蹈飞机  阅读(1882)  评论(21编辑  收藏  举报