VB里INPUTBOX里输入中文时到INPUTBOX筐里时是乱码是什么原因,能处理吗?
还有个排列组合问题:
输入两个数:M,N (M>N)。 如果想从M中选N个数做排列,并且把所有的排列结果都显示出来怎么完成呢?
假如有5(是M)个数,1,2,3,4,5。
从这5个数中选出3(是N)个数做组合显示为
123  124  125  134  135  145  234  235  345
这就是他们的组合怎样用代码编出任意M数中选出N个数
谢谢

解决方案 »

  1.   

    VB里INPUTBOX里输入中文时到INPUTBOX筐里时是乱码是什么原因,能处理吗?装个VB6的SP5试试看。
      

  2.   

    INPUTBOX的问题,我也碰到过,好象在设计时不能输入中文,生成EXE后问题就消失了
    M,N的问题,应该是用排除法,具体是先举出所有的排列值,再1.排除掉值里有相同元素的,2.排除掉只是顺序颠倒而元素相同的,得出的就是组合的结果了,具体实现,好象用递归是最简洁的
      

  3.   

    控件:
    TEXTBOX: NAME=TEXT2,NAME=TEXT3
    LISTBOX: NAME=LIST1
    LABEL: NAME=LABEL1,CAPTION="M:"
           NAME=LABEL2,CAPTION="N:"
    COMMANDBUTTON: NAME=COMAAND1,CAPTION="列出"
    OPTION: NAME=OPTION1,INDEX=0,CAPTION="排列",VALUE=TRUE
            NAME=OPTION1,INDEX=1,CAPTION="组合",VALUE=FALSE Option Explicit
    Dim S, ST As String
    Dim TL As Integer
    Dim TL1 As IntegerPrivate Sub Command1_Click()List1.Clear: TL1 = 0
    TL = Val(Text3.Text)
    If Option1(1).Value Then
       Compage Val(Text2.Text), Val(Text3.Text)
    Else
       PL Val(Text2.Text), Val(Text3.Text)
    End If
    Me.Caption = TL1 & " 个结果"End SubSub Compage(M, N As Integer) '为了方便,假定M个数就是从1到M的自然数
    If M <= N Or M < 1 Or N < 1 Then Exit Sub
    Dim i As Integer
    S = ""
    For i = TL - N + 1 To M
        ST = Left(ST, TL - N)
        If N > 1 Then ST = ST & Trim(CStr(i)) Else S = ST & Trim(CStr(i))
        DoEvents
        If N > 1 Then
           Compage M, N - 1
        Else
           If NotExistTheSame(S) Then '去掉相同的元素
                 List1.AddItem Trim(CStr(S))
                 TL1 = TL1 + 1
           End If
        End If
    Next i
    End SubSub PL(M, N As Integer) '为了方便,假定M个数就是从1到M的自然数
    If M <= N Or M < 1 Or N < 1 Then Exit Sub
    Dim i As Integer
    S = ""
    For i = 1 To M
        ST = Left(ST, TL - N)
        If N > 1 Then ST = ST & Trim(CStr(i)) Else S = ST & Trim(CStr(i))
        DoEvents
        If N > 1 Then
           PL M, N - 1
        Else
           
           List1.AddItem Trim(CStr(S))
           TL1 = TL1 + 1
           
        End If
    Next i
    End SubFunction NotExistTheSame(ByVal Stmp As String) As Boolean
    Dim i, j, k As Integer
    Dim SM, SP As String * 1
    k = Len(Stmp)
    For i = 1 To k '后面的必须大于前面的
        SM = Val(Mid(Stmp, i, 1)) '第N个
        For j = i + 1 To k
            SP = Val(Mid(Stmp, j, 1)) '第N+K个
            If SM >= SP Then NotExistTheSame = False: Exit Function
        Next j
    Next i
    NotExistTheSame = True
    End Function
      

  4.   

    那样的话,你应该把M个元素放入数组,具体实现要麻烦一点,容器也不能用LISTBOX了
    我用的是排除法,即你应该先把可能出现的都找出来,且M不能大于9
    应该有更直接的办法,我一下子想不出来
    如果你想出来了发短消息给我
      

  5.   

    谢谢你,好的我想一想你的手机号或者是QQ号告诉我
    我QQ是29950351联系
      

  6.   

    是这样的,因为我是把把数字合成字符串,在筷选时将字符串变回数字,这样如果M>=10的话,写进去的是10,取出来就变成1和0了,所以这只是建立在你假设的低位数基础上的权宜的方法
    要使它具有普遍适用性,应该定义一个含M个元素的数组或者其实的OBJECT(如果在JAVA中更好,可以通过枚举来实现,那样可以包含N种OBJECT),在列出这些OBJECT时,仅通过引用它的ID来完成
      

  7.   

    对你说的对,我想用数组做,但现在还是不行我想想看吧,如果你有时间用数组试试。
    JAVA我不会没办法还没学呢哈哈
      

  8.   

    vb6.0的BUG,INPUTBOX在设计时不能输入中文,否则显示乱码.
      

  9.   

    这不是VB的Bug,Windows的毛病!
    你是不是装了Office2000?
    你看一下字体库里有没有一个细明体(文件名好象叫MingLiu什么的)的字体?
    把它删除掉就没问题了!