ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 香川群子

[原创] 凑数之简化版【随机凑数】

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-31 16:56 | 显示全部楼层
太强大了,膜拜!

TA的精华主题

TA的得分主题

发表于 2017-10-31 19:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢香川老师分享!太强大啦!!!!

TA的精华主题

TA的得分主题

发表于 2017-10-31 22:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-11-1 06:56 | 显示全部楼层

谢谢香川老师分享!我正需要测试一组回馈数据!谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-1 09:30 | 显示全部楼层
liulang0808 发表于 2017-10-31 09:22
香川老师又出手了,谢谢分享

附件有更新,增加了元素个数允许范围的显示,
以及计算误差精度的设置。

请有兴趣的坛友重新下载附件。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-1 09:32 | 显示全部楼层
zpy2 发表于 2017-10-31 15:36
以逗号分隔的20个数值(1-8)

php版的算24,是什么算法原理?

递归排列组合吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-1 09:34 | 显示全部楼层
zpy2 发表于 2017-10-31 15:37
数据多感觉还是比较慢的。

目前是完全随机调整,计算效率是非常低的(很多次随机结果是无效的),只适合于少量数据的凑数。

可以优化一下,比如,随机调整时,
第一个数随机,但第二个数就是用遍历筛选+随机,这样效率反而高一些。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-1 09:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
microyip 发表于 2017-10-31 10:01
见贴要第一时间点赞

这是孤独骑士的朋友在精英培训论坛上的一个凑数要求,
原帖是灰袍法师的组合凑数效率比较低,

因为原帖主只需要任意一组随机凑数结果,
所以我就拍脑袋想出了一个随机凑数的算法,试了一下效果还可以,因此分享给大家。

…………
因为不是精心制作,所以按我的惯例,变量都没有定义。哈哈哈。

刚刚稍微升级了一下,加了个计算精度的设置。

TA的精华主题

TA的得分主题

发表于 2017-11-1 09:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zpy2 发表于 2017-10-31 15:36
以逗号分隔的20个数值(1-8)

'来个VBA的

Option Explicit
Const PRECISION = 0.000001
Const COUNT_OF_NUMBER = 4 '4个数,可以更多或更少
Const NUMBER_TO_CAL = 24 '结果可以更小或更大
Dim number(COUNT_OF_NUMBER) As Double
Dim expression(COUNT_OF_NUMBER) As String

Function Search(n) As Boolean
  Dim i As Integer, j As Integer
  If n = 1 Then
    Search = IIf((Abs(number(0) - NUMBER_TO_CAL) < PRECISION), True, False)
    Exit Function
  End If
  For i = 0 To n - 1
    For j = i + 1 To n - 1
      Dim A As Double, B As Double
      Dim expA As String, expB As String
      A = number(i): B = number(j)
      number(j) = number(n - 1)
      expA = expression(i): expB = expression(j)
      expression(j) = expression(n - 1)
      expression(i) = "(" + expA + "+" + expB + ")"
      number(i) = A + B
      If (Search(n - 1)) Then Search = True: Exit Function
      expression(i) = "(" + expA + "-" + expB + ")"
      number(i) = A - B
      If (Search(n - 1)) Then Search = True: Exit Function
      expression(i) = "(" + expB + "-" + expA + ")"
      number(i) = B - A
      If (Search(n - 1)) Then Search = True: Exit Function
      expression(i) = "(" + expA + "*" + expB + ")"
      number(i) = A * B
      If (Search(n - 1)) Then Search = True: Exit Function
      If B <> 0 Then
        expression(i) = "(" + expA + "/" + expB + ")"
        number(i) = A / B
        If (Search(n - 1)) Then Search = True: Exit Function:
      End If
      If A <> 0 Then
        expression(i) = "(" + expB + "/" + expA + ")"
        number(i) = B / A
        If (Search(n - 1)) Then Search = True: Exit Function
      End If
      number(i) = A: number(j) = B
      expression(i) = expA: expression(j) = expB
  Next j, i
  Search = False
End Function

Sub test()
  Dim x As Integer, i As Integer
  For i = 0 To COUNT_OF_NUMBER - 1
    x = InputBox("输入第" & (i + 1) & "个数", COUNT_OF_NUMBER & "个数算" & NUMBER_TO_CAL)
    number(i) = x
    expression(i) = CStr(x)
  Next
  If Search(COUNT_OF_NUMBER) Then
    MsgBox expression(0) & "=" & CStr(NUMBER_TO_CAL)
  Else
    MsgBox "无解"
  End If
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-11-1 10:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-7 00:49 , Processed in 0.037826 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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