For it = 1 To MSFlexGrid1.Rows - 1 
s = MSFlexGrid1.TextMatrix(it, 1) 
s是3位数的数,现在要求d=MSFlexGrid1.TextMatrix(it, 2)统计出当前行(包括当前行)以前,01共出现多少次 
如现在有5行数据为 
第一行 s=566 那么d=0,没有01出现 
第二行s=810 那么d=1, 01在2行数据中共出现1次 
第三行s=190 那么d=2,01在3行数据中共出现2次 
第四行s=531 那么d=2,01在4行数据中共出现2次 
第五行s=105 那么d=3,01在5行数据中共出现3次 
i = 0 
For it = 1 To MSFlexGrid1.Rows - 1 
ss = MSFlexGrid1.TextMatrix(it, 1) 
ss1 = UBound(Split(ss, "1")) 
ss2 = UBound(Split(ss, "0")) 
If (ss1 > ss2) Then ss1 = ss2 
i = i + ss1 MSFlexGrid1.TextMatrix(it, 2) = i 
Next 
现在这个代码可以使用,但是如果改成 
ss1 = UBound(Split(ss, "0")) 
ss2 = UBound(Split(ss, "0")) 
的,也就是统计向500,900,090,600,这样的却不好使,当被比较数字s出现1个0时他现在就计算一次,也就是说它把“0”,“0”和并成1个“0”了,如560,那么它现在就认为是一次了,其实要的是比较数字s要出现2个0才认为是一次,如040,这样的才算一次,11的22的33的等重复的现在和00的情况相同,特别说明,如果s=000,或=111,222,333的那么d=3,因为拿00举例,00共在000中出现3次(百位和十位一次,百位和个位一次,个位和十位一次),该怎么改

解决方案 »

  1.   

    这不就是变相求组合。
    你原先统计出来 0 的个数只可能是 {0,1,2,3},把它对应成组合数就是 {0,0,1,3}。
    ss2 = choose(ss2+1,0,0,1,3)
      

  2.   

    for k=0 to 9
    i = 0
    For it = 1 To MSFlexGrid1.Rows - 1
    ss = MSFlexGrid1.TextMatrix(it, 1)
    ss1 = UBound(Split(ss, k))
    ss2 = UBound(Split(ss, "0"))
    ss2 = Choose(ss2 + 1, 0, 0, 1, 3)
    If (ss1 > ss2) Then ss1 = ss2
    i = i + ss1
    j=k+2
    MSFlexGrid1.TextMatrix(it, j) = i
    Next
    这么改完,00的是对了,可是01---09都不对了,如果没有ss2 = Choose(ss2 + 1, 0, 0, 1, 3)
    这句,只有00是错的,其他都对,该怎么办
      

  3.   

    那就分情形计算
    if k=0 then
        ss1 = Choose(ss2 + 1, 0, 0, 1, 3)
    else
        If (ss1 > ss2) Then ss1 = ss2 
    end if
      

  4.   

    For k = 0 To 9
    i = 0
    For it = 1 To MSFlexGrid1.Rows - 1
    ss = MSFlexGrid1.TextMatrix(it, 1)
    ss1 = UBound(Split(ss, k))
    ss2 = UBound(Split(ss, "0"))
    If k = 0 Then
        ss1 = Choose(ss2 + 1, 0, 0, 1, 3)
    Else
        If (ss1 > ss2) Then ss1 = ss2End Ifi = i + ss1
    j = k + 2
    MSFlexGrid1.TextMatrix(it, j) = iNext
    Next
    现在想大概改成
    For k = 0 To 9
    for l = k to 9
    i = 0
    For it = 1 To MSFlexGrid1.Rows - 1
    ss = MSFlexGrid1.TextMatrix(it, 1)
    ss1 = UBound(Split(ss, k))
    ss2 = UBound(Split(ss, l))'修改
    If k = 0 Then'这也要修改,这时的k将来可能是0--9的数,并不是单独的0了,不知改成If k = l Then是否可行
        ss1 = Choose(ss2 + 1, 0, 0, 1, 3)
    Else
        If (ss1 > ss2) Then ss1 = ss2End Ifi = i + ss1
    j = k + 2'需要修改成k和l的组合是55种,也就是00---99,从2列开始直到57列,这块我不知道该怎么改了
    MSFlexGrid1.TextMatrix(it, j) = iNext
    Next
    next
    请问老师这个该怎么改