|
本帖最后由 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,不算大,关键是运算非常简单 |
|