穷举彩票号码的通用过程

Text1输入数字总个数;Text2输入每组的数字个数;App.Path & "/1.txt"用于看输出结果;Label1用于显示组个数;Command1就是执行按钮。这是一个穷举组合结果的万能代码。

Option Explicit
Private mlngAllNumCount As Long, mlngGetNumCount As Long
Private mblnCancelProc As Boolean, mlngCurResultCount As Long
Private mastrOneResult() As String
Private mlngFileNo As Long
Private Sub ListNum(ByVal Start As Long, ByVal Level As Long)
    Dim i As Long
    If mblnCancelProc Then Exit Sub
    For i = Start To mlngAllNumCount - mlngGetNumCount + Level
        mastrOneResult(Level) = i
        If Level < mlngGetNumCount Then             '是否到了最底层
            ListNum i + 1, Level + 1                '没到底,递归啦,这是本过程的核心,很简单哟
        Else
            Print #mlngFileNo, Join(mastrOneResult, vbTab)  '递归到最深层,就可以输出了
            mlngCurResultCount = mlngCurResultCount + 1
            If mlngCurResultCount Mod &H2000& = 0 Then
                Label1.Caption = mlngCurResultCount     '显示实际找出了多少组数字
                DoEvents
            End If
        End If
    Next
End Sub
Private Sub Command1_Click()
    Dim t As Single, i As Long
    If Command1.Caption = "处理" Then
        mlngAllNumCount = Text1.Text    '数字总个数
        mlngGetNumCount = Text2.Text    '每组要取的数字个数
        i = Zhuhe(mlngAllNumCount, mlngGetNumCount)
        If i = 0 Then
            MsgBox "结果太多,请不要尝试了!"
            Exit Sub
        End If
        Label2.Caption = i
        t = Timer
        mblnCancelProc = False
        Command1.Caption = "停止"
        mlngCurResultCount = 0          '已产生出的组合总数
        ReDim mastrOneResult(1 To mlngGetNumCount)
        mlngFileNo = FreeFile
        Open App.Path & "/1.txt" For Output As #mlngFileNo
            ListNum 1, 1
        Close #mlngFileNo
        Label1.Caption = mlngCurResultCount
        Command1.Caption = "处理"
        Me.Caption = Timer - t
    Else
        mblnCancelProc = True
    End If
End Sub
Private Function Zhuhe(AllNum As Long, GetNum As Long) As Long
    '算组合总数的过程,为防溢出,而做了特别设计
    '只要结果总数在20亿以内,都不会溢出的
    '太大的数不太可能会完成穷举,本程序也就不做尝试了
    '接近溢出的上限列举:65536取2、2345取3、477取4、193取5、110取6
    '75取7、58取8、49取9、40取10、39取11、37取12、35取13、34取15、33取16等
   
    Dim i As Long, j As Long, colget As Collection
    Dim m As Long, n As Long, Num1 As Long, Num2 As Long
    On Error GoTo fail
    Num1 = 1
    Set colget = New Collection
    For i = GetNum To 2 Step -1
        colget.Add i
    Next
    For i = AllNum To AllNum - GetNum + 1 Step -1
        m = colget.Count
        If m > 0 Then
            n = m
            For j = 1 To m
                If j > n Then Exit For
                If Num1 Mod colget(j) = 0 Then
                    Num1 = Num1 / colget(j)
                    colget.Remove j
                    n = n - 1
                    j = j - 1
                End If
            Next
        End If
        Num2 = i
        m = colget.Count
        If m > 0 Then
            n = m
            For j = 1 To m
                If j > n Then Exit For
                If Num2 Mod colget(j) = 0 Then
                    Num2 = Num2 / colget(j)
                    colget.Remove j
                    n = n - 1
                    j = j - 1
                End If
            Next
        End If
        Num1 = Num1 * Num2  '分子中的两个乘数分别消去分母再相乘,可防中间过程的溢出
    Next
    Zhuhe = Num1
    Exit Function
fail:
   
End Function
Private Sub Form_Load()
    Command1.Caption = "处理"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    mblnCancelProc = True
End Sub
本人经过几年的努力,终于掌握了C#的编程,与同学一起开发了这套软件。与各位网友共勉。 1.5版正式推出!主要修正了(以下都是重大问题所以应及时更新,对给您造成的不便,本公司深表歉意): 1、重装软件后提示30天试用期已过的BUG; 2、机器码和注册码的0和字母O不好区分的问题。 3、一个注册表错误,会使软件重启后当成试用期结束。 “世间能有几回运,彩票游戏存玄机” ,也许您会有疑问:彩票开奖号码不是完全随机的吗?那我还算什么,随便写几个数字买算了!!其实您错了,世界上并没有绝对理想的随机数,就算是用电脑也只能产生接近随机的数:在彩票开奖产生号码时,诸如摇奖机的物理特性、每个球的重量和光滑度的差异、空气的流动性等等都会使开奖结果产生一定的偏态,在中短期内有一定的规律可寻。 那么怎样才能找出偏态,利用偏态提高中奖的概率呢?用手工显然不行,您需要一款称手软件!但是现在彩票软件多得让人眼花缭乱,哪个才是适合您的呢?得彩易彩票旋转矩阵选号杀号王双色球专用版的问世,解决了您的烦恼,您只要下载使用了,软件就会主动成为您的好帮手,让您中奖不再是梦想! 本公司双色球项目开发小组根据组里多名长年研究彩票双色球的专家的成果,经过反复的概率验证,精心设计了算法,其中大部分属于本公司原创独有。程序运行时随着期数的增加,出号趋势会愈发明显,算法也会愈发准确,一般开奖期数在最近50-150期时效果最为明显。 友情提示:彩票软件可以帮您提高中奖的概率,但并不能保证您100%中大奖,本软件也不例外!如果有所谓专家向您推荐号码并保证能中大奖的,请您一定要当心受骗! 1、本软件基于微软.net框架进行开发,技术先进。 2、市面上的一般彩票软件所提供的旋转矩阵只有廖廖几个方案(如保6中5,保5中4),本软件则提供了几十种方案,应有尽有。 3、选号杀号功能的强大和全面是其它一般彩票软件所没有的。 4、过滤功能全面,完全可以满足需要。 5、开奖数据可以更新,导入和导出,极大的方便彩民朋友。 6、学习容易,帮助文档详尽,上手极快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值