设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 565|回复: 0
打印 上一主题 下一主题

[模块/函数] 【新手进阶】之二十四:再谈二进制之规划求解

[复制链接]
跳转到指定楼层
1#
发表于 2023-2-20 05:44:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前面的帖子《【新手进阶】之二十三:从二进制到组合算法说过,可以通过二进制来处理组合问题。规划求解说到底,也是一种组合算法。比如,从若干个数中,挑选几个数出来,使得这些数的和为给定的数。
闲话少叙,先上代码:
  1. Sub getNumbers(ByRef arr() As Variant, ByVal sum As Integer)
  2.     Dim i As Long
  3.     Dim j As Long
  4.     Dim strResult As String
  5.     Dim intCount As Integer
  6.     Dim intSum As Integer
  7.     For i = 1 To 2 ^ UBound(arr)
  8.         intSum = 0
  9.         intCount = 0
  10.         strResult = ""
  11.         For j = LBound(arr) To UBound(arr)
  12.             If i And 2 ^ j Then
  13.                 intSum = intSum + arr(j)
  14.                 strResult = strResult & " " & arr(j)
  15.                 intCount = intCount + 1
  16.             End If
  17.         Next j
  18.         If intCount > 0 And intSum = sum Then
  19.             Debug.Print strResult
  20.         End If
  21.     Next i
  22. End Sub

  23. Sub test()
  24.     Dim arr() As Variant
  25.     Dim sum As Integer
  26.     arr = Array(2, 3, 5, 7, 11, 13, 17, 19, 21, 23, 29, 31, 37)
  27.     sum = 100
  28.     Call getNumbers(arr, sum)
  29. End Sub
复制代码
写法基本没太大差异,唯一区别就是这里用了“逻辑与”(And)来处理二进制情况。
i And 2 ^ j 表示将十进制数据i与2^j进行“与”运算,表示i的二进制j位是否为1。
附件如下:

【新手进阶】之一:If分支语句
【新手进阶】之二:分支语句总结
【新手进阶】之三:循环语句For
【新手进阶】之四:循环语句Do和死循环
【新手进阶】之五:递归算法
【新手进阶】之六:冒泡排序
【新手进阶】之七:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之八:公共变量与传址过程、传值过程
【新手进阶】之九:仓库管理系统
【新手进阶】之十:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:嵌套与并列——再谈If流程问题
【新手进阶】之十三:记录集的“凌迟”——逐条导出记录集
【新手进阶】之十四:“不明觉厉”——浅谈左侧导航栏的设计
【新手进阶】之十五:浅谈ADO之序言
【新手进阶】之十六:浅谈ADO之Connection
【新手进阶】之十七:浅谈ADO之Conmmand(上)
【新手进阶】之十八:浅谈ADO之Command(下)
【新手进阶】之十九:Outlook风格导航界面
【新手进阶】之二十:浅谈ADO之Recordset(上)
【新手进阶】之二十一:浅谈ADO之Recordset(下)
【新手进阶】之二十二:浅谈不绑定数据源操作记录
【新手进阶】之二十三:从二进制到组合算法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 13:43 , Processed in 0.104815 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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