a(100) 是個int型的數組,其中只有兩個是重復的,
如何用一次循環找出相同的數? 

解决方案 »

  1.   

    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
      

  2.   

    ??不懂, superarhow(苏泊尔耗) 可否解釋一下你的算法?
      

  3.   

    算了,我先把我的算法寫出來
    '初始化數組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,
      

  4.   

    sqfeiyu(流星雨) 
    有点问题
    数组a中的数值不一定是0-100的呀
      

  5.   

    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                      '释放空间
      

  6.   

    学习,可是不知道这句话是什么意思啊
    Test(a(i)) = Test(a(i)) + 1
            If Test(a(i)) = 2 Then
    还请指教???
      

  7.   

    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
      

  8.   

    我有一个比较恶心的想法
    写关键语句dim con.....
    dim rs.....大家应该都明白我什么想法了吧。题目也没说用什么方法解决。。还不明白的话数据表中就一个字段是主键非空。。无重复
    用一个循环往数据库中写入。。
    有重复,返回错误代码
    记下i的位置
      

  9.   

    学习,可是不知道这句话是什么意思啊
    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的话说明重复了。
      

  10.   

    VB 里有没有类似 VBS 中的字典对象阿?
    如果有的话,也会比较快哦~,不过应该比不过数组下标的直接读取
      

  11.   

    我有一个比较恶心的想法
    写关键语句dim con.....
    dim rs.....大家应该都明白我什么想法了吧。题目也没说用什么方法解决。。还不明白的话数据表中就一个字段是主键非空。。无重复
    用一个循环往数据库中写入。。
    有重复,返回错误代码
    记下i的位置
    ——————————————————————————————————————
    你不愧為新新人類啊!
      

  12.   

    我也想到一个比较恶心的。不过似乎不如楼上那位数据库的高人恶心。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
      

  13.   

    上班有点无聊,所以贴个出来给大家瞧瞧,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
      
      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
      

  14.   

    补充一句,如果正规来说像Test(-32768 To 32767) 数组还应该初始化一下0,万一哪台机器不照顾不是出不来了.
      

  15.   

    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  
     
    高明,一点都不恶心~~
      

  16.   

    to  c_c_(cc)
    浪费空间换时间,在现在来说内存不值钱而时间更值钱。用数据库就省空间了吗?你也要考虑一下数据库占用多少空间吧。(-32768 To 32767) 64k,哪个数据库跑起来占内存小于64K的?况且我的那段代码查找到重复数以后立即释放掉这64K内存。
    Test(-32768 To 32767) 的字节数组在redim时全部初始化为0。这不由哪台机器照不照顾决定,由VBRUNTIME决定.
      

  17.   

    很佩服chewinggum(口香糖·个人二五计划第一年)的算法,很不错哦
      

  18.   

    恩。
    integer可以用数组建索引, 效率为n
    long的话空间置换时间就不合适了, 
    可先快速排序在查找.
    效率为 n + n*log(n) = n*log(n)并不慢.
      

  19.   

    楼上的算法要至少两次循环了,算法还是要和实际需要配合。最解决实际问题的算法就是最好的算法,目前楼主的实际问题是取值范围为int,并且要求一次循环。所以chewinggum的算法是最快最符合要求的,一次循环都未必做完就能得出结论而且代码量少,内存占用也可以容忍。