设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: tanhong
打印 上一主题 下一主题

趣味找数字

[复制链接]
1#
发表于 2009-2-23 20:41:37 | 显示全部楼层
本帖最后由 ljw990485 于 2009-2-23 21:01 编辑

找3个数就好办,穷举也很快,
option base 1
dim i as integer,j as integer,k as integer,A() as double,Target as double
dim t as double
n=?多少个就输入多少吧
Redim A(n),自己写程序输入这n个数和目标数Target
for i=1 to n-2
    for j=i+1 to n-1
        t=A(i)+A(j)
        for k=j+1 to n
           if abs(t+A(k)-Target)<1.0e-10 then
               输出 i,j,k,只找一组的话就结束
        endif
  多个next
以上程序循环次数
1)给定i,j
k循环 n-(j+1)+1=n-j次
2)故给定i后,j,k循环次数为
[n-(i+1)]+[n-(i+2)]+...+1=(n-i)(n-i-1)/2=(n-i)^2/2-(n-i)/2
3)最大循环次数
[(n-1)^2+...+2^2]/2-[(n-1)+...+2]/2
=n(n-1)(n-2)/6=O(n^3/6)
n=1000时,最大循环数为166167000,不算大,关键是运算非常简单
2#
发表于 2009-2-23 20:43:33 | 显示全部楼层
如果用0-1规划的方法,也可以,但可能会带来误差的问题
而穷举的方法只有2个加法,舍入误差的影响比较小
3#
发表于 2009-2-23 21:09:52 | 显示全部楼层
本帖最后由 ljw990485 于 2009-2-25 00:04 编辑

靠,程序一样的

不过有一个地方不一样,大家看出来了吗?

fArray(i) + fArray(j) + fArray(k) = fSum

1)浮点数不能这样判断是否相等
2)多一次加法,循环很多次的话,量就很大哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-7 19:17 , Processed in 0.099686 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表