荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jek (好好学习天天向上), 信区: Program
标  题: Re: 求算法
发信站: BBS 荔园晨风站 (Fri Mar 31 18:05:10 2000), 转信

想法一:
先找出M和N的1..n倍的且小于V的数,可知M和N的小于V的1..n次方的所有数字也
可以用第一次搜索找出,而M、N构成的小于V的多位数则已经包含在第一次搜索
里面。由以上找出的数再加上小于mas{M、N}的自然数作为元素和+、-无序组合进
行搜索。例如下面的M=8,N=8,V=1000
  1.找出8、8+8=8*2、8+8+8=8*3、8+8+8+8=8*4、...、8+8+...+8=8*125<=1000;
  2.可知8^2=8*8、8^3=8*64<=1000;
  3.而88=8*11,888=8*111(假如M、N不一样的话也一样可以组合得出来,这个
    是没问题的。例如M=4、N=5,可以组合出45=4*10+5,而4*10是已经找出的);
  4.找出小于mas{M、N}的自然数1、2、3、...、6、7;
一共找出132个符合要求的数,接着从2个数开始和+、-组合直至系统溢出为止(当
然我们会控制不让它溢出)

  不过想法一好象实现不了,其时间复杂度太大,而且搜索不完整。于是有了
想法二:
将V用M、N拆,同时执行4个线程,从+、-、*、/4个方向同时开始,如果结果是正
整数则继续,非正整数停止并返退一步从另一个方向开始,直至结果为零。

第二种方法应该比第一种方法好很多,因为第一种方法搜索太盲目,而第二种方法
是朝着V进行的,时间复杂度小很多。

请高手指教!

【 在 PENNY (◆◆健◆◆) 的大作中提到: 】
:   输入固定的M,N,V,通过各种运算使等式成立,例如
:   M=8
:   N=8
:   V=1000?
:   1.  (8*8*8-8)*(8+8)/8-8=1000
:   2.  8+8+8+88+888=1000
:   求所有解,好久没讨论算法了,大家看看吧!


--
※ 修改:·jek 於 Mar 31 18:17:39 修改本文·[FROM: 192.168.1.118]
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.118]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店