对于字符串数类型的字"000"到"999"
我想找出三个字符组合到一起不重复出现的所有情况,显示出来.请问如何解决:
   比如:001,010,100,都是"0","0","1"的组合,因此只能算其中一个.只保留最小的001
   再比如:012,021,102,120,201,210,都是"0","1","2"的组合,因此只保留最小的012
请问高手如何把这些不重复的组合从小到大的排列出来?????????????/马上给分

解决方案 »

  1.   

    Private Sub Command1_Click()
        Dim s As String
        Dim a() As String
        Dim i As Long, ii As Long, iii As Long
        Dim nCount As Long
        
        
        s = "0123456789"
           
        For i = 1 To 8
        
            For ii = i + 1 To 9
                For iii = ii + 1 To 10
                    nCount = nCount + 1
                    ReDim Preserve a(nCount) As String
                    a(nCount) = Mid(s, i, 1) & Mid(s, ii, 1) & Mid(s, iii, 1)
                    Debug.Print a(nCount)
                Next iii
            Next ii
       Next i
       
       MsgBox nCount
        
    End Sub
    12
    13
    14
    15
    16
    17
    18
    19
    23
    24
    25
    26
    27
    28
    29
    34
    35
    36
    37
    38
    39
    45
    46
    47
    48
    49
    56
    57
    58
    59
    67
    68
    69
    78
    79
    89
    123
    124
    125
    126
    127
    128
    129
    134
    135
    136
    137
    138
    139
    145
    146
    147
    148
    149
    156
    157
    158
    159
    167
    168
    169
    178
    179
    189
    234
    235
    236
    237
    238
    239
    245
    246
    247
    248
    249
    256
    257
    258
    259
    267
    268
    269
    278
    279
    289
    345
    346
    347
    348
    349
    356
    357
    358
    359
    367
    368
    369
    378
    379
    389
    456
    457
    458
    459
    467
    468
    469
    478
    479
    489
    567
    568
    569
    578
    579
    589
    678
    679
    689
    789
      

  2.   

    我有个比较笨的方法:
    1. 找出三个字符组合的所有情况,生成一个列表 A
    2. 在 A 从第一个数据开始,逐个比较,看是否有重复的,如果有,则删除重复的,然后把此数据添加到列表 B 中.
    3. 步骤2循环完成后,再对列表 B 进行排序输出就可以了.注意: 检查两个数据是否重复需要单独写一个过程此方法效率比较低,期待好的解决方法!
      

  3.   

    回复人: crycoming(瞎编) ( ) 信誉:98   你这个程序有漏洞."001"到"009"哪去了?
      

  4.   

    Private Sub Command1_Click()
        Dim i As Long
        Dim j As Long
        Dim k As Long
        
        For i = 0 To 9
            For j = 0 To 9
                If j >= i Then
                    For k = j + 1 To 9
                        Debug.Print i & j & k
                    Next
                End If
            Next
        Next
    End Sub
      

  5.   

    没有留意是可以重复的,下面的考虑了重复情况
    Private Sub Command1_Click()
        Dim s As String
        Dim a() As String
        Dim i As Long, ii As Long, iii As Long
        Dim nCount As Long
        
        
        s = "0123456789"
           
        For i = 1 To 10
        
            For ii = i To 10
                For iii = ii To 10
                    nCount = nCount + 1
                    ReDim Preserve a(nCount) As String
                    a(nCount) = Mid(s, i, 1) & Mid(s, ii, 1) & Mid(s, iii, 1)
                    
                    Debug.Print a(nCount)
                Next iii
            Next ii
       Next i
       
       MsgBox nCount
        
    End Sub
    000
    001
    002
    003
    004
    005
    006
    007
    008
    009
    011
    012
    013
    014
    015
    016
    017
    018
    019
    022
    023
    024
    025
    026
    027
    028
    029
    033
    034
    035
    036
    037
    038
    039
    044
    045
    046
    047
    048
    049
    055
    056
    057
    058
    059
    066
    067
    068
    069
    077
    078
    079
    088
    089
    099
    111
    112
    113
    114
    115
    116
    117
    118
    119
    122
    123
    124
    125
    126
    127
    128
    129
    133
    134
    135
    136
    137
    138
    139
    144
    145
    146
    147
    148
    149
    155
    156
    157
    158
    159
    166
    167
    168
    169
    177
    178
    179
    188
    189
    199
    222
    223
    224
    225
    226
    227
    228
    229
    233
    234
    235
    236
    237
    238
    239
    244
    245
    246
    247
    248
    249
    255
    256
    257
    258
    259
    266
    267
    268
    269
    277
    278
    279
    288
    289
    299
    333
    334
    335
    336
    337
    338
    339
    344
    345
    346
    347
    348
    349
    355
    356
    357
    358
    359
    366
    367
    368
    369
    377
    378
    379
    388
    389
    399
    444
    445
    446
    447
    448
    449
    455
    456
    457
    458
    459
    466
    467
    468
    469
    477
    478
    479
    488
    489
    499
    555
    556
    557
    558
    559
    566
    567
    568
    569
    577
    578
    579
    588
    589
    599
    666
    667
    668
    669
    677
    678
    679
    688
    689
    699
    777
    778
    779
    788
    789
    799
    888
    889
    899
    999
      

  6.   

    对了吗?
    Private Sub Command1_Click()
        Dim s As String
        Dim a() As String
        Dim i As Long, ii As Long, iii As Long
        Dim nCount As Long
        
        
        s = "0123456789"
           
        For i = 1 To 10
        
            For ii = i To 10
                For iii = ii To 10
                    
                    If ii = iii And i <> ii Then GoTo NextOne:
                    nCount = nCount + 1
                    ReDim Preserve a(nCount) As String
                    a(nCount) = Mid(s, i, 1) & Mid(s, ii, 1) & Mid(s, iii, 1)
                    Debug.Print a(nCount)
    NextOne:
                Next iii
            Next ii
       Next i
       
       MsgBox nCount
        
    End Sub000
    001
    002
    003
    004
    005
    006
    007
    008
    009
    012
    013
    014
    015
    016
    017
    018
    019
    023
    024
    025
    026
    027
    028
    029
    034
    035
    036
    037
    038
    039
    045
    046
    047
    048
    049
    056
    057
    058
    059
    067
    068
    069
    078
    079
    089
    111
    112
    113
    114
    115
    116
    117
    118
    119
    123
    124
    125
    126
    127
    128
    129
    134
    135
    136
    137
    138
    139
    145
    146
    147
    148
    149
    156
    157
    158
    159
    167
    168
    169
    178
    179
    189
    222
    223
    224
    225
    226
    227
    228
    229
    234
    235
    236
    237
    238
    239
    245
    246
    247
    248
    249
    256
    257
    258
    259
    267
    268
    269
    278
    279
    289
    333
    334
    335
    336
    337
    338
    339
    345
    346
    347
    348
    349
    356
    357
    358
    359
    367
    368
    369
    378
    379
    389
    444
    445
    446
    447
    448
    449
    456
    457
    458
    459
    467
    468
    469
    478
    479
    489
    555
    556
    557
    558
    559
    567
    568
    569
    578
    579
    589
    666
    667
    668
    669
    678
    679
    689
    777
    778
    779
    789
    888
    889
    999
      

  7.   

    花了一个中午编写的!已测试通过。Private Sub Command1_Click()
    Dim X(1000)For i = 0 To 999
        X(i) = Format(i, "000")
        X1 = Mid(X(i), 1, 1)
        X2 = Mid(X(i), 2, 1)
        X3 = Mid(X(i), 3, 1)
        If X1 >= X2 And X2 >= X3 Then X(i) = X3 & X2 & X1
        If X1 >= X3 And X3 >= X2 Then X(i) = X2 & X3 & X1
        If X2 >= X3 And X3 >= X1 Then X(i) = X1 & X3 & X2
        If X2 >= X1 And X1 >= X3 Then X(i) = X3 & X1 & X2
        If X3 >= X1 And X1 >= X2 Then X(i) = X2 & X1 & X3
        If X3 >= X2 And X2 >= X1 Then X(i) = X1 & X2 & X3
    NextFor i = 0 To 998 '由小到大排列
     For j = i + 1 To 999
        If X(i) > X(j) Then
        t = X(i): X(i) = X(j): X(j) = t
        End If Next
    Nextt = X(0)
    Debug.Print X(0)For i = 1 To 999    If X(i) <> t Then
         Debug.Print X(i)
         t = X(i)
        End IfNextEnd Sub
      

  8.   


    Private Sub Command1_Click()
    Open "D:\ls.txt" For Output As 1 '将结果写到d:\ls.txt中Dim X(1000)For i = 0 To 999
        X(i) = Format(i, "000")
        X1 = Mid(X(i), 1, 1)
        X2 = Mid(X(i), 2, 1)
        X3 = Mid(X(i), 3, 1)
        If X1 >= X2 And X2 >= X3 Then X(i) = X3 & X2 & X1
        If X1 >= X3 And X3 >= X2 Then X(i) = X2 & X3 & X1
        If X2 >= X3 And X3 >= X1 Then X(i) = X1 & X3 & X2
        If X2 >= X1 And X1 >= X3 Then X(i) = X3 & X1 & X2
        If X3 >= X1 And X1 >= X2 Then X(i) = X2 & X1 & X3
        If X3 >= X2 And X2 >= X1 Then X(i) = X1 & X2 & X3
    NextFor i = 0 To 998 '由小到大排列
     For j = i + 1 To 999
        If X(i) > X(j) Then
        t = X(i): X(i) = X(j): X(j) = t
        End If Next
    Nextt = X(0)
    Print #1, X(0)For i = 1 To 999    If X(i) <> t Then
         Print #1, X(i)
         t = X(i)
        End IfNextClose #1
    End Sub000
    001
    002
    003
    004
    005
    006
    007
    008
    009
    011
    012
    013
    014
    015
    016
    017
    018
    019
    022
    023
    024
    025
    026
    027
    028
    029
    033
    034
    035
    036
    037
    038
    039
    044
    045
    046
    047
    048
    049
    055
    056
    057
    058
    059
    066
    067
    068
    069
    077
    078
    079
    088
    089
    099
    111
    112
    113
    114
    115
    116
    117
    118
    119
    122
    123
    124
    125
    126
    127
    128
    129
    133
    134
    135
    136
    137
    138
    139
    144
    145
    146
    147
    148
    149
    155
    156
    157
    158
    159
    166
    167
    168
    169
    177
    178
    179
    188
    189
    199
    222
    223
    224
    225
    226
    227
    228
    229
    233
    234
    235
    236
    237
    238
    239
    244
    245
    246
    247
    248
    249
    255
    256
    257
    258
    259
    266
    267
    268
    269
    277
    278
    279
    288
    289
    299
    333
    334
    335
    336
    337
    338
    339
    344
    345
    346
    347
    348
    349
    355
    356
    357
    358
    359
    366
    367
    368
    369
    377
    378
    379
    388
    389
    399
    444
    445
    446
    447
    448
    449
    455
    456
    457
    458
    459
    466
    467
    468
    469
    477
    478
    479
    488
    489
    499
    555
    556
    557
    558
    559
    566
    567
    568
    569
    577
    578
    579
    588
    589
    599
    666
    667
    668
    669
    677
    678
    679
    688
    689
    699
    777
    778
    779
    788
    789
    799
    888
    889
    899
    999
      

  9.   

    自己改一下不就完了,怎么混啊?
    Public Function GetSort(sValue As String) As String
        Dim s As String
        Dim a() As String
        Dim i As Long, ii As Long, iii As Long
        Dim nCount As Long
        Dim D1, D2, D3
        
       D1 = Mid(sValue, 1, 1)
       D2 = Mid(sValue, 2, 1)
       D3 = Mid(sValue, 3, 1)
       
       
        s = "0123456789"
           
        For i = 1 To 10
        
            For ii = i To 10
                For iii = ii To 10
                    
                    If ii = iii And i <> ii Then GoTo NextOne:
                    nCount = nCount + 1
                    ReDim Preserve a(nCount) As String
                    a(nCount) = Mid(s, i, 1) & Mid(s, ii, 1) & Mid(s, iii, 1)
                    Text1.Text = Text1.Text & a(nCount) & vbNewLine
                    Debug.Print a(nCount)
    NextOne:
                Next iii
            Next ii
       Next i
       
       For i = 1 To nCount
           If InStr(1, a(nCount), D1) > 0 And InStr(1, a(nCount), D2) > 0 And InStr(1, a(nCount), D3) > 0 Then
               GetSort = a(nCount)
               Exit Function
           End If
       Next i
    End Function
      

  10.   


    Private Sub Command1_Click()
        Dim s As String
        Dim a() As String
        Dim i As Long, ii As Long, iii As Long
        Dim nCount As Long
        Dim strsql As String
        Dim excelapp As New Excel.Application
        Dim worksheet As New Excel.worksheet
        Set Workbook = excelapp.Workbooks.Open(App.Path & "\ddd.xls")
        Set worksheet = Workbook.Sheets(1)
        With worksheet    s = "0123456789"
           
        For i = 1 To 10
        
            For ii = i To 10
                For iii = ii To 10
                    nCount = nCount + 1
                    ReDim Preserve a(nCount) As String
                    a(nCount) = Mid(s, i, 1) & Mid(s, ii, 1) & Mid(s, iii, 1)
                    .Cells(nCount, 1).NumberFormatLocal = "@"
                    .Cells(nCount, 1) = a(nCount)
    '                Debug.Print a(nCount)
                    
                Next iii
            Next ii
       Next i   End With
       
      Text1.Text = nCount
        
      worksheet.SaveAs (App.Path & "\ddd.xls")
      Set worksheet = Nothing
      Workbook.Close
      Set Workbook = Nothing
      Set excelapp = NothingEnd Sub
      

  11.   

    回复人: crycoming(瞎编) ( ) 信誉:98 
     自己改一下不就完了,怎么混啊?我要的是一个单独的功能函数,功能就是:
    提取 任何一个"000"到"999"的字符串数字,如何把组合成它自身的这三个字符按升序排序??
     比如:231排序后为:"123"
    做成一个可以传参数的函数,传进的参数为任何一个"000"到"999"的字符数字,函数返回值为排序后的结果: