Office中国论坛/Access中国论坛

标题: 带空格位置的组合算法 [打印本页]

作者: FBR2002    时间: 2007-10-9 23:17
标题: 带空格位置的组合算法
我在窗体上放了两行文本框,每行14个文本框,按
W101、W102、W103、...、W114;
W201、W202、W203、...、W214
进行编号。
在这两行文本框中,不一定都有数字,即有可能某个或某几个文本框是空的。
凡第一行文本框中有数值的,在第二行相应的文本框中就没有数值。例如,W102有数值,则W202是空。
有可能某个位置的第一行、第二行都没有数值。例如,W101、W201都是空。
假设第一行中共4个文本框有数值,第二行中共7个文本框有数值,第一行文本框的数值必须在组合内。既只需对第二行有数值的文本框进行C(7,9-4)的组合。
最后输出的结果要求按原来的1、2、3、...、14的位置出现,不能错位。


我在网上看了很多组合编程,都是对数值进行组合的,而且不涉及空格站位的问题。
请各位高手帮忙看看,应该怎样做?

[ 本帖最后由 FBR2002 于 2007-10-9 23:40 编辑 ]
作者: hi-wzj    时间: 2007-10-10 11:54
假设第一行中共4个文本框有数值,第二行中共7个文本框有数值,第一行文本框的数值必须在组合内。既只需对第二行有数值的文本框进行C(7,9-4)的组合。
最后输出的结果要求按原来的1、2、3、...、14的位置出现,不能错位。
-------------------
不明白是什么意思。
作者: FBR2002    时间: 2007-10-10 20:18
假设空格用*占位
例如:
第一行:* 3 * * * 1 * * * 0 * 1 * *
第二行:* * * 0 1 * * 1 3 * 0 * 1 1

输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
* 3 * 0 1 1 * 1 3  0  0 1  *  *
* 3 * 0 1 1 * 1 3  0 * 1  1  *
* 3 * 0 1 1 * 1 3  0 * 1  *  1
......

[ 本帖最后由 FBR2002 于 2007-10-10 21:06 编辑 ]
作者: ZHUXQSTYLE    时间: 2007-10-10 21:21
足彩啊!!??
500WAN ID?
作者: hi-wzj    时间: 2007-10-11 10:13
很抱歉,没看懂您是如何组合的。
作者: FBR2002    时间: 2007-10-11 13:26
假设空格用*占位
例如:
第一行:* 3 * * * 1 * * * 0 * 1 * *
第二行:* * * 0 1 * * 1 3 * 0 * 1 1

选9个出来组合,红色的数字必须在内。

输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
* 3 * 0 1 1 * 1 3  0  0 1  *  *
* 3 * 0 1 1 * 1 3  0  *  1  1  *
* 3 * 0 1 1 * 1 3  0 *  1  *  1
......


换个说法:第一行的红色数字直接按原位置写出来,只对第二行的数值进行C(7,5)组合。

[ 本帖最后由 FBR2002 于 2007-10-11 13:30 编辑 ]
作者: FBR2002    时间: 2007-10-11 20:31
这样叙述应该是很清楚的了吧?


个人感觉这个问题很难。因为实际使用时,还得先判断第一行有几个数,第二行有几个数。
作者: Henry D. Sy    时间: 2007-10-11 22:31
看不懂,只看懂“足彩”500万
作者: FBR2002    时间: 2007-10-12 00:03
从第二行的7个数中任选5个出来组合。
作者: FBR2002    时间: 2007-10-12 00:15
抱歉,笔误。
是C(5,7)  从第二行的7个数中选5个来组合。
作者: FBR2002    时间: 2007-10-12 15:20
谢谢cuxun帮忙!

我先学习消化一下。
作者: FBR2002    时间: 2007-10-12 22:12
谢谢cuxun的初稿!

按照你的思路,我觉得可以在W3前对第二行先进行选出5个的组合,然后:
1、选出刚好有5个数的行(因为有的行空格站位后实际的数没有5个);
2、把第一行(4个数)分别插入选出的行(得到需要的9个数)。

感觉这样在第1步会有许多无用的组合。不知我思路是否正确,有没有更简单的算法呢?
作者: FBR2002    时间: 2007-10-13 12:42
在网上找的组合程序,修改了一下

Function NFormM(ByVal iStar As Integer, iEnd As Integer, Num As Integer, Optional StrAll As String)
Dim i, j, k As Integer
Dim W1(14), W2(14), W3(14) As String
  If Num = 0 Then
      Me.Text30 = Me.Text30 & StrAll & vbCrLf
  Else
  k = 0
    For j = 1 To 14
        W1(j) = ""
        W1(j) = Nz(Me.Controls("W1" & Format(j, "00")), "N")
        W2(j) = ""
        W2(j) = Nz(Me.Controls("W2" & Format(j, "00")), "N")
        If W1(j) = "N" Then
           k = k + 1
           If W2(j) <> "N" Then
              W3(k) = W2(j)
           End If
        Else
           k = k + 1
           W3(k) = W1(j)
        End If
    Next j
      For i = iStar To iEnd
      DoEvents
        NFormM i + 1, iEnd, Num - 1, StrAll & W3(i) & " - "
      Next i
  End If
End Function

但还是没解决空格和必选项的问题
作者: FBR2002    时间: 2007-10-13 20:31
原帖由 cuxun 于 2007-10-13 19:07 发表
Dim i, j, k As Integer
这样只是给K定义了整型的值,i,j是没定义类型的.

Dim i As Integer
Dim  j As Integer
Dim  k  As Integer



问题不在这儿。好象可以用逗号分开定义的。

关键还是在组合函数的定义:NFormM i + 1, iEnd, Num - 1, StrAll & W3(i) & " - "
作者: FBR2002    时间: 2007-10-13 21:09
对组合函数的定义做了些改动,代上文本编号是乎是一种方法。

W204=0  W205=1  W208=1  W209=3  W211=0  
W204=0  W205=1  W208=1  W209=3  W213=1  
W204=0  W205=1  W208=1  W209=3  W214=1  
W204=0  W205=1  W208=1  W211=0  W213=1  
W204=0  W205=1  W208=1  W211=0  W214=1  
W204=0  W205=1  W208=1  W213=1  W214=1  
W204=0  W205=1  W209=3  W211=0  W213=1  
W204=0  W205=1  W209=3  W211=0  W214=1  
W204=0  W205=1  W209=3  W213=1  W214=1  
W204=0  W205=1  W211=0  W213=1  W214=1  
W204=0  W208=1  W209=3  W211=0  W213=1  
W204=0  W208=1  W209=3  W211=0  W214=1  
W204=0  W208=1  W209=3  W213=1  W214=1  
W204=0  W208=1  W211=0  W213=1  W214=1  
W204=0  W209=3  W211=0  W213=1  W214=1  
W205=1  W208=1  W209=3  W211=0  W213=1  
W205=1  W208=1  W209=3  W211=0  W214=1  
W205=1  W208=1  W209=3  W213=1  W214=1  
W205=1  W208=1  W211=0  W213=1  W214=1  
W205=1  W209=3  W211=0  W213=1  W214=1  
W208=1  W209=3  W211=0  W213=1  W214=1
作者: FBR2002    时间: 2007-10-14 13:28
已经解决。谢谢cuxun!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3