设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2733|回复: 15
打印 上一主题 下一主题

[模块/函数] 带空格位置的组合算法

[复制链接]
跳转到指定楼层
#
发表于 2007-10-9 23:17:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我在窗体上放了两行文本框,每行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 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
15#
 楼主| 发表于 2007-10-14 13:28:45 | 只看该作者
已经解决。谢谢cuxun!
14#
 楼主| 发表于 2007-10-13 21:09:47 | 只看该作者
对组合函数的定义做了些改动,代上文本编号是乎是一种方法。

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
13#
 楼主| 发表于 2007-10-13 20:31:17 | 只看该作者
原帖由 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) & " - "
12#
 楼主| 发表于 2007-10-13 12:42:12 | 只看该作者
在网上找的组合程序,修改了一下

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

但还是没解决空格和必选项的问题
11#
 楼主| 发表于 2007-10-12 22:12:25 | 只看该作者
谢谢cuxun的初稿!

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

感觉这样在第1步会有许多无用的组合。不知我思路是否正确,有没有更简单的算法呢?
10#
 楼主| 发表于 2007-10-12 15:20:20 | 只看该作者
谢谢cuxun帮忙!

我先学习消化一下。
9#
 楼主| 发表于 2007-10-12 00:15:30 | 只看该作者
抱歉,笔误。
是C(5,7)  从第二行的7个数中选5个来组合。
8#
 楼主| 发表于 2007-10-12 00:03:13 | 只看该作者
从第二行的7个数中任选5个出来组合。
7#
发表于 2007-10-11 22:31:57 | 只看该作者
看不懂,只看懂“足彩”500万
6#
 楼主| 发表于 2007-10-11 20:31:01 | 只看该作者
这样叙述应该是很清楚的了吧?


个人感觉这个问题很难。因为实际使用时,还得先判断第一行有几个数,第二行有几个数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-5-1 13:13 , Processed in 0.109155 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表