主题:求一组数据中相同值的个数
xk-10
[专家分:0] 发布于 2008-03-10 08:56:00
求两组数据中相同值的数量!比如1,2,3,4,11和1,3,4,11,12,13,18等用qb怎么解决呀?
回复列表 (共8个回复)
沙发
Mato完整版 [专家分:1270] 发布于 2008-03-11 21:49:00
OPEN"s1.txt" FOR INPUT AS #1
OPEN"s2.txt" FOR INPUT AS #2
CLS
DIM s(32000) AS INTEGER:k=0
DO WHILE NOT(EOF(1))
INPUT #1,n
s(n)=1
LOOP
DO WHILE NOT(EOF(2))
INPUT #2,n
IF s(n)=1 THEN k=k+1
LOOP
PRINT k
END
这种方法最省时间,但是占空间大。如果是用C或PASCAL的话直接用布尔型的数组,一个元素只占一字节,可整型数组的一个元素占二字节,并且如果数据中有超过32000的数就没办法了。
板凳
Mato完整版 [专家分:1270] 发布于 2008-03-11 21:49:00
这也许是QB的缺点。
3 楼
moz [专家分:37620] 发布于 2008-03-12 00:44:00
嘿嘿,嘿嘿.
4 楼
xk-10 [专家分:0] 发布于 2008-03-12 03:08:00
非常感谢moz!
我是个初学者!老师的指点够我消化一阵了。
5 楼
moz [专家分:37620] 发布于 2008-03-12 08:22:00
呵呵,你感谢错对象了。
6 楼
moz [专家分:37620] 发布于 2008-03-12 08:58:00
我只是不知道楼主的要求是不是只是[color=ff00ff]个数[/color]
而Mato嘛,呵呵,的确很快。其实数组的范围是 -32768 to 32767
declare function sames%(x$,y$)
declare sub delspc(a$)
print sames("1,2,3,4,11","1,3,4,11,12,13")
sub delspc(a$)
for i%=1 to len(a$)
if mid$(a$,i%,1)=" " then mid$(a$,i%)=mid$(a$,i%+1)+" "
next
a$=ltrim$(rtrim$(a$))
if left$(a$,1)<>"," then a$=","+a$
if right$(a$,1)<>"," then a$=a$+","
end sub
function sames(x$,y$)
delspc x$
delspc y$
i%=2
do while i%>1
j%=instr(i%,x$,",")
if j%>0 then
z$=mid$(x$,i%-1,j%-i%+1)
if instr(y$,z$)>0 then s=s+1
end if
i%=j%+1
loop
sames=s
end function
7 楼
xk-10 [专家分:0] 发布于 2008-03-12 17:33:00
呵呵,看我糊涂的!对不住“Mato完整版”哈!
8 楼
Mato完整版 [专家分:1270] 发布于 2008-03-12 20:49:00
其实我是Matodied,
不过前段时间把密码弄丢了,现在我正在向总版主要回密码。
我来回复