You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指定奇偶数量的数字组合计算与批量生成技术咨询

彩票组合计算与批量生成方案

一、符合条件的组合数计算

1. 范围1-25选15(8奇7偶)

1-25中包含13个奇数(1、3、…、25)和12个偶数(2、4、…、24)。符合要求的组合数为从13个奇数中选8个的组合数乘以从12个偶数中选7个的组合数:
C(13,8) * C(12,7) = 1287 * 792 = 1019304
即共有1019304种有效组合。

2. 范围缩小至20个数字(以1-20为例,8奇7偶)

1-20中包含10个奇数和10个偶数。符合要求的组合数为:
C(10,8) * C(10,7) = 45 * 120 = 5400
即共有5400种有效组合。

二、Python批量生成代码

1. 1-25范围生成8奇7偶的15位组合

import itertools

# 定义1-25的奇数、偶数列表
odds = list(range(1, 26, 2))
evens = list(range(2, 25, 2))

valid_combinations = []
# 遍历所有8奇+7偶的组合
for odd_group in itertools.combinations(odds, 8):
    for even_group in itertools.combinations(evens, 7):
        # 合并后排序(可选,方便统一格式查看)
        full_comb = sorted(odd_group + even_group)
        valid_combinations.append(full_comb)

# 将结果写入文本文件
with open("lottery_25_combinations.txt", "w", encoding="utf-8") as f:
    for comb in valid_combinations:
        f.write(" ".join(map(str, comb)) + "\n")

print(f"共生成{len(valid_combinations)}种组合,已保存到lottery_25_combinations.txt")

2. 1-20范围生成8奇7偶的15位组合

import itertools

# 定义1-20的奇数、偶数列表
odds = list(range(1, 21, 2))
evens = list(range(2, 21, 2))

valid_combinations = []
for odd_group in itertools.combinations(odds, 8):
    for even_group in itertools.combinations(evens, 7):
        full_comb = sorted(odd_group + even_group)
        valid_combinations.append(full_comb)

# 写入文件
with open("lottery_20_combinations.txt", "w", encoding="utf-8") as f:
    for comb in valid_combinations:
        f.write(" ".join(map(str, comb)) + "\n")

print(f"共生成{len(valid_combinations)}种组合,已保存到lottery_20_combinations.txt")

三、VBA批量生成代码

1. 1-25范围生成8奇7偶的15位组合

Sub GenerateLottery_25()
    Dim odds As Variant, evens As Variant
    Dim oddCombs As Variant, evenCombs As Variant
    Dim i As Long, j As Long, rowNum As Long
    Dim fullComb As String
    
    ' 初始化1-25的奇数、偶数数组
    odds = Array(1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25)
    evens = Array(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24)
    
    rowNum = 1
    ' 获取所有8个奇数的组合、7个偶数的组合
    oddCombs = GetCombinations(odds, 8)
    evenCombs = GetCombinations(evens, 7)
    
    ' 遍历组合并写入Excel工作表
    For i = LBound(oddCombs) To UBound(oddCombs)
        For j = LBound(evenCombs) To UBound(evenCombs)
            fullComb = Join(SortArray(oddCombs(i) & evenCombs(j)), " ")
            Cells(rowNum, 1).Value = fullComb
            rowNum = rowNum + 1
        Next j
    Next i
    
    MsgBox "生成完成,共" & (UBound(oddCombs) - LBound(oddCombs) + 1) * (UBound(evenCombs) - LBound(evenCombs) + 1) & "种组合"
End Sub

' 辅助函数:生成指定长度的组合
Function GetCombinations(arr As Variant, k As Integer) As Variant
    Dim result As Collection
    Dim temp() As Variant
    Set result = New Collection
    ReDim temp(1 To k)
    Combine arr, LBound(arr), UBound(arr), 1, k, temp, result
    
    ' 将集合转换为数组返回
    Dim output() As Variant
    ReDim output(1 To result.Count)
    For i = 1 To result.Count
        output(i) = result(i)
    Next i
    GetCombinations = output
End Function

Sub Combine(arr As Variant, start As Integer, endNum As Integer, index As Integer, k As Integer, temp As Variant, result As Collection)
    Dim i As Integer
    If index > k Then
        result.Add temp
        Exit Sub
    End If
    For i = start To endNum - (k - index)
        temp(index) = arr(i)
        Combine arr, i + 1, endNum, index + 1, k, temp, result
    Next i
End Sub

' 辅助函数:对数组进行升序排序
Function SortArray(arr As Variant) As Variant
    Dim i As Long, j As Long, temp As Variant
    For i = LBound(arr) To UBound(arr) - 1
        For j = i + 1 To UBound(arr)
            If arr(i) > arr(j) Then
                temp = arr(i)
                arr(i) = arr(j)
                arr(j) = temp
            End If
        Next j
    Next i
    SortArray = arr
End Function

2. 1-20范围生成8奇7偶的15位组合

仅需修改初始化的奇数、偶数数组,其余辅助函数可复用:

Sub GenerateLottery_20()
    Dim odds As Variant, evens As Variant
    Dim oddCombs As Variant, evenCombs As Variant
    Dim i As Long, j As Long, rowNum As Long
    Dim fullComb As String
    
    ' 初始化1-20的奇数、偶数数组
    odds = Array(1, 3, 5, 7, 9, 11, 13, 15, 17, 19)
    evens = Array(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
    
    rowNum = 1
    oddCombs = GetCombinations(odds, 8)
    evenCombs = GetCombinations(evens, 7)
    
    For i = LBound(oddCombs) To UBound(oddCombs)
        For j = LBound(evenCombs) To UBound(evenCombs)
            fullComb = Join(SortArray(oddCombs(i) & evenCombs(j)), " ")
            Cells(rowNum, 1).Value = fullComb
            rowNum = rowNum + 1
        Next j
    Next i
    
    MsgBox "生成完成,共" & (UBound(oddCombs) - LBound(oddCombs) + 1) * (UBound(evenCombs) - LBound(evenCombs) + 1) & "种组合"
End Sub

' 以下辅助函数同上方的GetCombinations、Combine、SortArray,可直接复用
Function GetCombinations(arr As Variant, k As Integer) As Variant
    Dim result As Collection
    Dim temp() As Variant
    Set result = New Collection
    ReDim temp(1 To k)
    Combine arr, LBound(arr), UBound(arr), 1, k, temp, result
    
    Dim output() As Variant
    ReDim output(1 To result.Count)
    For i = 1 To result.Count
        output(i) = result(i)
    Next i
    GetCombinations = output
End Function

Sub Combine(arr As Variant, start As Integer, endNum As Integer, index As Integer, k As Integer, temp As Variant, result As Collection)
    Dim i As Integer
    If index > k Then
        result.Add temp
        Exit Sub
    End If
    For i = start To endNum - (k - index)
        temp(index) = arr(i)
        Combine arr, i + 1, endNum, index + 1, k, temp, result
    Next i
End Sub

Function SortArray(arr As Variant) As Variant
    Dim i As Long, j As Long, temp As Variant
    For i = LBound(arr) To UBound(arr) - 1
        For j = i + 1 To UBound(arr)
            If arr(i) > arr(j) Then
                temp = arr(i)
                arr(i) = arr(j)
                arr(j) = temp
            End If
        Next j
    Next i
    SortArray = arr
End Function

内容的提问来源于stack exchange,提问作者ROCA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:30:18