dim b(1) max = 1 for i = 1 to 100 if a(i) > max then redim(b, a(i)) max = a(i) endif b(i) = b(i) + 1 if b(i) = 2 then PRINT i, a(i) ; 找到 next i
??不懂, superarhow(苏泊尔耗) 可否解釋一下你的算法?
算了,我先把我的算法寫出來 '初始化數組a(100) ... ...'找重復的 dim b(100) as integer for i=0 to 100 if b(a(i))=1 then debug.print "重復的數是" & a(i) else b(a(i))=1 end if next條件限制是a(100)最大是的100,
sqfeiyu(流星雨) 有点问题 数组a中的数值不一定是0-100的呀
Dim Test() As Byte '使用不定数组,便于释放空间 ' 用byte数组可以少用一点内存 ReDim Test(-32768 To 32767) 'integer取值范围-32768~32767, 'VB数组的下标可以使用负数给我们提供了方便
Dim i As Integer For i = LBound(a) To UBound(a) Test(a(i)) = Test(a(i)) + 1 If Test(a(i)) = 2 Then MsgBox "重复的数为:" & a(i) & vbCrLf & "所在的位置为:" & i Exit For End If Next
Erase Test '释放空间
学习,可是不知道这句话是什么意思啊 Test(a(i)) = Test(a(i)) + 1 If Test(a(i)) = 2 Then 还请指教???
Private Sub Command1_Click() Dim A(0 To 100) As Variant Dim S As String Dim TEMP As Long Dim STRTEMP As String For I = 0 To 100 A(I) = I Next '测试值: A(67) = 42 S = "," & Join(A, ",") & "," For J = 0 To 100 STRTEMP = "," & CStr(A(J)) & "," TEMP = InStr(1, S, STRTEMP) TEMP = InStr(TEMP + Len(CStr(A(J))), S, STRTEMP) If TEMP <> 0 Then MsgBox A(J) Exit Sub End If Next MsgBox "无重复。" End Sub
我有一个比较恶心的想法 写关键语句dim con..... dim rs.....大家应该都明白我什么想法了吧。题目也没说用什么方法解决。。还不明白的话数据表中就一个字段是主键非空。。无重复 用一个循环往数据库中写入。。 有重复,返回错误代码 记下i的位置
学习,可是不知道这句话是什么意思啊 Test(a(i)) = Test(a(i)) + 1 If Test(a(i)) = 2 Then 还请指教??? --------------------------------------------应该是这样的,假如a(5)和a(10)都是15 当第一个a(5)时给Test(a(5))也就是Test(15)=Test(15)+1那么Test(15)=1 循环到Test(a(10))的时候Test(15)=Test(15)+1就等于2了 然后在判断Test(15)=2的话说明重复了。
我有一个比较恶心的想法 写关键语句dim con..... dim rs.....大家应该都明白我什么想法了吧。题目也没说用什么方法解决。。还不明白的话数据表中就一个字段是主键非空。。无重复 用一个循环往数据库中写入。。 有重复,返回错误代码 记下i的位置 —————————————————————————————————————— 你不愧為新新人類啊!
我也想到一个比较恶心的。不过似乎不如楼上那位数据库的高人恶心。On Error Resume Next Dim K As New Collection Err.Clear For i = 0 To 100 K.Add "", CStr(a(i)) If Err.Number <> 0 Then MsgBox "重复项是:" & i Exit For End If Next i
上班有点无聊,所以贴个出来给大家瞧瞧,HOHOOption Explicit Private a(99) As StringPrivate Sub Command1_Click() Dim i As Integer Dim str_b As String Dim temp As String Dim str_e As String
Text1.Text = Text1.Text & "元数组为:" & vbCrLf
For i = LBound(a) To UBound(a) Text1.Text = Text1.Text & a(i) & " " If i Mod 10 = 9 Then Text1.Text = Text1.Text & vbCrLf End If Next
Do Until InStr(str_b, ",") = 0 temp = Left(str_b, InStr(str_b, ",") - 1) str_b = Right(str_b, Len(str_b) - Len(temp) - 1) If InStr(str_e, temp) > 0 Then
ElseIf InStr(str_b, temp) > 0 Then str_e = str_e & temp & "," End If Loop
Text1.Text = Text1.Text & Replace(str_e, ",", " ") & vbCrLf End SubPrivate Sub Form_Load() Dim i As Integer
For i = LBound(a) To UBound(a) a(i) = Int(Rnd * 100) Next End Sub
补充一句,如果正规来说像Test(-32768 To 32767) 数组还应该初始化一下0,万一哪台机器不照顾不是出不来了.
yimins() ( ) 信誉:99 Blog 2006-09-01 10:05:00 得分: 0
我也想到一个比较恶心的。不过似乎不如楼上那位数据库的高人恶心。On Error Resume Next Dim K As New Collection Err.Clear For i = 0 To 100 K.Add "", CStr(a(i)) If Err.Number <> 0 Then MsgBox "重复项是:" & i Exit For End If Next i
高明,一点都不恶心~~
to c_c_(cc) 浪费空间换时间,在现在来说内存不值钱而时间更值钱。用数据库就省空间了吗?你也要考虑一下数据库占用多少空间吧。(-32768 To 32767) 64k,哪个数据库跑起来占内存小于64K的?况且我的那段代码查找到重复数以后立即释放掉这64K内存。 Test(-32768 To 32767) 的字节数组在redim时全部初始化为0。这不由哪台机器照不照顾决定,由VBRUNTIME决定.
max = 1
for i = 1 to 100
if a(i) > max then
redim(b, a(i))
max = a(i)
endif
b(i) = b(i) + 1
if b(i) = 2 then PRINT i, a(i) ; 找到
next i
'初始化數組a(100)
... ...'找重復的
dim b(100) as integer
for i=0 to 100
if b(a(i))=1 then
debug.print "重復的數是" & a(i)
else
b(a(i))=1
end if
next條件限制是a(100)最大是的100,
有点问题
数组a中的数值不一定是0-100的呀
' 用byte数组可以少用一点内存
ReDim Test(-32768 To 32767) 'integer取值范围-32768~32767,
'VB数组的下标可以使用负数给我们提供了方便
Dim i As Integer
For i = LBound(a) To UBound(a)
Test(a(i)) = Test(a(i)) + 1
If Test(a(i)) = 2 Then
MsgBox "重复的数为:" & a(i) & vbCrLf & "所在的位置为:" & i
Exit For
End If
Next
Erase Test '释放空间
Test(a(i)) = Test(a(i)) + 1
If Test(a(i)) = 2 Then
还请指教???
Dim A(0 To 100) As Variant
Dim S As String
Dim TEMP As Long
Dim STRTEMP As String
For I = 0 To 100
A(I) = I
Next
'测试值:
A(67) = 42
S = "," & Join(A, ",") & ","
For J = 0 To 100
STRTEMP = "," & CStr(A(J)) & ","
TEMP = InStr(1, S, STRTEMP)
TEMP = InStr(TEMP + Len(CStr(A(J))), S, STRTEMP)
If TEMP <> 0 Then
MsgBox A(J)
Exit Sub
End If
Next
MsgBox "无重复。"
End Sub
写关键语句dim con.....
dim rs.....大家应该都明白我什么想法了吧。题目也没说用什么方法解决。。还不明白的话数据表中就一个字段是主键非空。。无重复
用一个循环往数据库中写入。。
有重复,返回错误代码
记下i的位置
Test(a(i)) = Test(a(i)) + 1
If Test(a(i)) = 2 Then
还请指教???
--------------------------------------------应该是这样的,假如a(5)和a(10)都是15
当第一个a(5)时给Test(a(5))也就是Test(15)=Test(15)+1那么Test(15)=1
循环到Test(a(10))的时候Test(15)=Test(15)+1就等于2了
然后在判断Test(15)=2的话说明重复了。
如果有的话,也会比较快哦~,不过应该比不过数组下标的直接读取
写关键语句dim con.....
dim rs.....大家应该都明白我什么想法了吧。题目也没说用什么方法解决。。还不明白的话数据表中就一个字段是主键非空。。无重复
用一个循环往数据库中写入。。
有重复,返回错误代码
记下i的位置
——————————————————————————————————————
你不愧為新新人類啊!
Dim K As New Collection
Err.Clear
For i = 0 To 100
K.Add "", CStr(a(i))
If Err.Number <> 0 Then
MsgBox "重复项是:" & i
Exit For
End If
Next i
Private a(99) As StringPrivate Sub Command1_Click()
Dim i As Integer
Dim str_b As String
Dim temp As String
Dim str_e As String
Text1.Text = Text1.Text & "元数组为:" & vbCrLf
For i = LBound(a) To UBound(a)
Text1.Text = Text1.Text & a(i) & " "
If i Mod 10 = 9 Then
Text1.Text = Text1.Text & vbCrLf
End If
Next
Text1.Text = Text1.Text & vbCrLf & "重复数为:" & vbCrLf
str_b = Join(a, ",")
If InStr(str_b, ",") = 0 Then Exit Sub
Do Until InStr(str_b, ",") = 0
temp = Left(str_b, InStr(str_b, ",") - 1)
str_b = Right(str_b, Len(str_b) - Len(temp) - 1)
If InStr(str_e, temp) > 0 Then
ElseIf InStr(str_b, temp) > 0 Then
str_e = str_e & temp & ","
End If
Loop
Text1.Text = Text1.Text & Replace(str_e, ",", " ") & vbCrLf
End SubPrivate Sub Form_Load()
Dim i As Integer
For i = LBound(a) To UBound(a)
a(i) = Int(Rnd * 100)
Next
End Sub
我也想到一个比较恶心的。不过似乎不如楼上那位数据库的高人恶心。On Error Resume Next
Dim K As New Collection
Err.Clear
For i = 0 To 100
K.Add "", CStr(a(i))
If Err.Number <> 0 Then
MsgBox "重复项是:" & i
Exit For
End If
Next i
高明,一点都不恶心~~
浪费空间换时间,在现在来说内存不值钱而时间更值钱。用数据库就省空间了吗?你也要考虑一下数据库占用多少空间吧。(-32768 To 32767) 64k,哪个数据库跑起来占内存小于64K的?况且我的那段代码查找到重复数以后立即释放掉这64K内存。
Test(-32768 To 32767) 的字节数组在redim时全部初始化为0。这不由哪台机器照不照顾决定,由VBRUNTIME决定.
integer可以用数组建索引, 效率为n
long的话空间置换时间就不合适了,
可先快速排序在查找.
效率为 n + n*log(n) = n*log(n)并不慢.