组合的算法(二)

转载 2008年09月28日 12:19:00

 组合算法的另外一种实现:

Option Explicit

Dim sValue()     As String, fValue()       As Integer, bUsed()       As Boolean

Sub Initialize()
        Dim iLoop     As Integer
        ReDim fValue(UBound(sValue))
        ReDim bUsed(UBound(sValue))
        For iLoop = 0 To UBound(sValue)
                fValue(iLoop) = CDbl(sValue(iLoop))
                bUsed(iLoop) = False
        Next iLoop
End Sub

Function FindResult(fTotal As Double) As Boolean
        Dim iBit     As Integer, fTemp       As Single
        FindResult = False
        Do
                iBit = 0
                Do While iBit <= UBound(bUsed)
                        bUsed(iBit) = Not bUsed(iBit)
                        If bUsed(iBit) Then Exit Do
                        iBit = iBit + 1
                Loop
                If iBit > UBound(bUsed) Then Exit Function
                fTemp = 0
                For iBit = 0 To UBound(bUsed)
                        If bUsed(iBit) Then fTemp = fTemp + fValue(iBit)
                Next iBit
                If Abs(fTemp - fTotal) < 0.01 Then
                        FindResult = True
                        Exit Function
                End If
        Loop
End Function


Function GetResult() As String
        Dim iLoop     As Integer
        GetResult = " "
        For iLoop = 0 To UBound(bUsed)
                If bUsed(iLoop) Then
                        If GetResult <> " " Then GetResult = GetResult + "   +   "
                        GetResult = GetResult & CStr(fValue(iLoop))
                End If
        Next iLoop
End Function

Private Sub search_Click()
        Const sData = "1,1,1,1"
        Dim bResult     As Boolean, iCount       As Integer
        sValue = Split(sData, ",")
        Initialize
        iCount = 0
        Do
                bResult = FindResult(2)
                If bResult Then
                        iCount = iCount + 1
                        Debug.Print "Answer   " & iCount & "   is   :   " & GetResult()
                End If
        Loop While bResult
        End
End Sub

 

参考链接

http://topic.csdn.net/u/20070322/20/9b1e5b48-5282-4efe-bd15-d84413ea9042.html

经典算法——字符串的所有组合

#include #include #include using namespace std; //从头扫描字符串得到第一个字符,针对第一个字符,有两种选择 //把这个字符放到组合中去,接下来我们需...
  • geekmanong
  • geekmanong
  • 2016年03月21日 11:32
  • 2296

NOIP2016全国信息学分区联赛提高组第二试 组合问题

组合问题(problem) 【问题描述】 【题解】 将这个“草稿”转一转,可以发现这是一个杨辉三角形,然后mod k,统计一下即可。【代码】var t,k,n,m:longint; ...
  • peter_zhu01
  • peter_zhu01
  • 2016年11月24日 16:56
  • 388

小算法:获得一个数的所有可能性组合

来自微信群发来的问题: 2 ,3,4,6怎么能算出24来,谁能想出4种来? 当然我就小动手了一下: 首先获取所有数字排列方式, 原理就是每个位置和其他位置都不重复 float poolBas...
  • zszeng
  • zszeng
  • 2016年03月05日 23:30
  • 906

Android实战技巧之二:组合控件

组合控件是自定义控件的一种,只不过它是由其他几个原生控件组合而成,故名组合控件。 在实际项目中,GUI会遇到一些可以提取出来做成自定义控件情况。 一个自定义控件的好处就是把一些需要模块化的UI和逻辑放...
  • lincyang
  • lincyang
  • 2012年04月02日 16:09
  • 8605

机制设计专栏(3)-组合拍卖简介

一,何为组合拍卖 组合拍卖属于多物品拍卖领域,其应用领域非常广泛,例如FCC的频谱拍卖,路线规划,网路选优等等。问题描述为,有m件不可分割的待售物品要分给n个bidder,每个bidder对这些物品中...
  • u012324934
  • u012324934
  • 2016年01月15日 14:32
  • 701

组合的生成算法

 本组合生成算法采用非递归生成方法,效率比较高。/** * 组合的生成算法 * 实现枚举出组合C(n,r) */package source;/** * @author lgj * @time 200...
  • lgjfly
  • lgjfly
  • 2009年10月07日 16:54
  • 680

利用动态规划(非递归)探索一个高效的(n,m)组合算法,名字待定

我们知道,排列组合的组合算法主要有两种,递归法或者01转换法,这里要介绍一种全新的罗列n个元素里不重复选取m(m>1 且 m...
  • baidu_38487648
  • baidu_38487648
  • 2017年05月21日 17:08
  • 332

概论-组合最优化问题、计算复杂性和启发式算法概念(现代优化计算方法)

1.组合最优化问题 定义: 是通过数学方法的研究去寻找离散事件的最优编排、分组、次序或筛选等。 描述: 最优化问题的数学模型的一般描述是 , x为决策变量,f ( x )为决...
  • ChinaJane163
  • ChinaJane163
  • 2015年10月12日 22:41
  • 2692

java全组合算法

package com.xyes.test; import java.util.ArrayList; import java.util.List; /**  * 利用数字二进制遍历 实现j...
  • key_xyes
  • key_xyes
  • 2017年04月06日 20:56
  • 1107

一种列出所有可能组合的算法

题目:现有n个小组,每个小组的人数分别是c1、c2、...、cn 现要求从每个小组中取一个人,共取n个人,组成一个领导小组。请设计一种算法,将所有可能的组合列出。 思路:可能的组合数量很容易求出,...
  • mr_orange_klj
  • mr_orange_klj
  • 2015年08月13日 23:28
  • 1237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:组合的算法(二)
举报原因:
原因补充:

(最多只允许输入30个字)