`
ihuashao
  • 浏览: 4725707 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

递归与组合

阅读更多

福利彩票和体育彩票近两年比较火暴,相应在VB论坛上大家讨论也较多。其实选择彩票与集合选择子集相同道理。下面给出一种VB的递归算法(虽然明知存入数组会加快运算速度,但最终也没能满意地实现,请大家多多指教。另外,效率确实不高)
Option Explicit

Private Sub Command1_Click()

Dim temp, i As Long, starttime As Long, endtime As Long
starttime = Timer
temp = cmn(22, 6)
endtime = Timer
Open "d:\mofn.txt" For Binary As #1 '写入文件
Put #1, , temp
Close #1

MsgBox UBound(Split(temp, vbCrLf)) + 1 & " 种组合", 64, "共用时 " & endtime - starttime & " 秒" '计算组合可能情况和耗时

End Sub


Function cmn(ByVal m As Integer, ByVal n As Integer) As String ' select n number from 1~m
Dim a() As String, temp As String, i As Long

ReDim a(1 To m) '定义数组
For i = 1 To m
a(i) = i
Next


If m = 3 Then
If n = 1 Then cmn = 1 & vbCrLf & 2 & vbCrLf & 3
If n = 2 Then cmn = "1,2" & vbCrLf & "1,3" & vbCrLf & "2,3"
If n = 3 Then cmn = "1,2,3"

ElseIf m > 3 Then
If n = 1 Then cmn = Join(a, vbCrLf)
If n = m Then cmn = Join(a, ",")
If n > 1 And n < m Then
temp = cmn(m - 1, n - 1)
'Debug.Print m - 1 & "," & n - 1 & vbCrLf & "----------------" & vbCrLf & temp & vbCrLf & "---------------------------" & vbCrLf '可以在立即窗口查看算法过程
temp = Replace(temp, vbCrLf, "," & m & vbCrLf) & "," & m
cmn = cmn(m - 1, n) & vbCrLf & temp
End If

End If

End Function

下面给出利用集合实现不重复随机选取某几个号码,这个函数也可用来实现数组全部元素的随机排列。

Function getone(ByVal m As Integer, ByVal n As Integer) As String ' one random option to select n number from 1~m without repeat number
Dim a() As String, temp As New Collection, i As Long, tempi As Long

ReDim a(1 To n) '定义数组
For i = 1 To m
temp.Add i '可以根据需要更改

Next


Randomize
For i = 1 To n
tempi = Int(Rnd * temp.Count) + 1
a(i) = temp(tempi)
temp.Remove tempi
Next
getone = Join(a, ",")
Set temp = Nothing
Erase a
End Function

Private Sub Command2_Click()'演示用法
MsgBox getone(30, 8), 64, "30选8 的一种选法"
MsgBox getone(100, 100), 64, "1 到100 的一种不重复全排列"
End Sub

分享到:
评论

相关推荐

    组合 递归算法(递归求组合)

    组合的递归算法(递归求*组合*),很简洁。

    N选M的所有组合(递归与非递归实现)

    本主题将详细探讨如何从N个不同的元素中选择M个元素的所有可能组合,同时提供递归和非递归两种实现方式。 首先,我们来理解组合的概念。组合是指在不考虑顺序的情况下,从N个不同元素中选择M个元素的方法数。在数学...

    大学计算机程序与递归组合抽象构造分解PPT学习教案.pptx

    【大学计算机程序与递归组合抽象构造分解】的PPT学习教案主要探讨了计算系统与程序设计的基础概念,包括程序的本质、构造以及执行机制。以下是详细的解析: 1. **基本动作与逻辑运算**: 计算系统的核心是能够执行...

    易语言递归法取排列组合例程

    本例程通过递归法实现了在易语言中获取排列组合的方法,这在处理大量数据或需要进行各种可能性计算的问题时非常有用。 递归法是解决此类问题的经典策略,它通过将问题分解成更小的子问题来解决。在排列组合问题中,...

    递归求组合序数

    此段程序用了递归算法计算组合数在相应表中的序数。

    递归法取排列组合易语言源码例程.rar

    递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合易语言源码例程.rar 递归法取排列组合...

    递归算法实现组合(c语言实现,平台:Automation Studio@AR system)

    ### 组合算法与递归实现 #### 组合算法简介 组合算法的目标是从n个不同元素中选择k个元素的所有可能组合。例如,从1到10这10个数字中选择3个数字的所有组合方式。组合算法的应用场景非常广泛,如概率计算、密码学...

    组合递归算法【原创】

    组合递归算法是一种在计算机科学中广泛使用的算法设计策略,它结合了递归的思想和组合的概念。递归是指一个函数或过程在其定义中调用自身,而组合则是指将小问题的解决方案组合起来以解决大问题。在本案例中,我们...

    组合数学答案Richard_A.Brualdi_组合数学习题解答

    #### 例题三:递归与组合序列 考虑递归定义的组合序列,例如\(p_1, p_2, \cdots, p_n\),其中\(n &gt; 1\),并探索其与\(n\)的关系。这类问题通常需要利用递归关系和组合恒等式进行分析,从而找到序列的通项公式或求和...

    实验二递归与分治

    实验二递归与分治 本实验报告的主要内容是递归与分治算法的设计和实现,通过对快速排序和集合划分问题的研究,了解递归算法的思想和分治法的基本思想。 递归算法 递归算法是一种常用的算法设计方法,它通过将问题...

    递归与分治策略 递归与分治策略

    而分治策略则是将一个大问题分解成若干个相似但规模更小的子问题,然后递归地解决这些子问题,最后将子问题的解组合起来得到原问题的解。 递归的核心要素包括边界条件和递归方程。边界条件是指问题的最小规模,当...

    基于hadoop用并行递归实现排列组合运算

    ### 基于Hadoop用并行递归实现排列组合运算 #### 背景介绍与问题描述 在计算机科学领域,数字排列组合是经典的算法问题之一,它不仅通俗易懂,而且对于初学者来说非常友好。通过这个问题的学习,我们可以很好地...

    案例排列组合(递归)

    这个名为"案例排列组合(递归)"的主题聚焦于如何利用递归方法来实现排列和组合的计算。递归是一种强大的编程技术,它允许函数调用自身以解决复杂的问题。 首先,我们需要理解排列和组合的概念。排列是指从n个不同...

    大学计算机程序与递归组合抽象与构造PPT课件.pptx

    总的来说,程序设计与递归组合、抽象与构造是计算机科学的核心概念,它们不仅帮助我们理解和构建计算系统,还促进了软件开发的效率和质量。通过深入学习这些概念,学生能够更好地掌握编程语言的精髓,从而设计出高效...

    算法递归与分治

    递归通常用于解决问题的结构可以直接映射到函数调用栈的情况,而分治则更注重于问题的分解和组合,往往涉及到数据结构的划分和合并。 在实际编程中,理解递归与分治的概念并能灵活运用,能够大大提高解决问题的效率...

    大学计算机第3讲-程序与递归-组合-抽象与构造.ppt

    #### 标题:大学计算机第3讲-程序与递归-组合-抽象与构造 #### 描述:大学计算机第3讲-程序与递归-组合-抽象与构造 #### 标签:无 #### 部分内容概述: 本次课程主要围绕着“程序与递归”的主题展开讨论,具体...

    递归实现组合型枚举.md

    递归实现组合型枚举.md

    算法设计与分析 递归与分治策略.docx

    **算法设计与分析:递归与分治策略** 递归与分治策略是算法设计中的重要方法,它们常用于解决复杂问题。本实验报告主要探讨了三种使用递归策略的算法:Ackerman函数实现、大数划分以及数据集合的排列组合。 1. **...

    acm教程递归与分治

    **递归与分治策略详解** 递归与分治是计算机科学中两种强大的算法设计方法,尤其在解决复杂问题时非常有效。它们是ACM(国际大学生程序设计竞赛)等算法竞赛中常见的技术,也是软件工程师必备的技能之一。 **递归...

    java m取n 重复 不重复 排列组合 for循环嵌套递归

    根据给定文件的信息,...通过以上内容,我们详细介绍了Java中m取n排列组合的具体实现方法,包括重复与不重复的情况,以及如何使用for循环嵌套和递归来完成这些任务。这将有助于读者更好地理解和掌握相关的编程技巧。

Global site tag (gtag.js) - Google Analytics