ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 289|回复: 9

[求助] 求助装备强化的次数模拟VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-17 14:38 | 显示全部楼层 |阅读模式
相关表格见附件,谢谢大家的帮忙

QQ截图20200317143737.png

强化.zip

11.11 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2020-3-17 15:11 | 显示全部楼层
如题

武器强化.rar (13.36 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-17 15:14 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-17 17:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-3-17 20:35 | 显示全部楼层
本帖最后由 大灰狼1976 于 2020-3-17 20:52 编辑

参考附件。
  1. Sub test()
  2. Dim arrOri, FstStr$, BasStr$, LowStr$, s$, j&, arrRst(1 To 10000, 1 To 3)
  3. Dim Flag As Boolean, n As Byte, m#, Cnt&, LwCnt&, r&, MainCnt#
  4. arrOri = [a2:l3]: LwCnt = arrOri(2, 9)
  5. [a5].CurrentRegion.Offset(1).ClearContents
  6. For j = 1 To 4
  7.   FstStr = FstStr & String(arrOri(2, j), CStr(arrOri(1, j) * 100))
  8.   BasStr = BasStr & String(arrOri(2, j + 4), CStr(arrOri(1, j + 4) * 100))
  9.   If j > 1 Then LowStr = LowStr & String(arrOri(2, j + 8), CStr(arrOri(1, j + 8) * 100))
  10. Next j
  11. Do
  12.   r = r + 1
  13.   arrRst(r, 1) = r
  14.   n = -Int(-Rnd() * 100)
  15.   If Flag = False Then s = FstStr Else If Cnt < LwCnt Then s = BasStr Else s = LowStr
  16.   If Flag = False Then arrRst(r, 2) = "首次" Else If Cnt < LwCnt Then arrRst(r, 2) = "基础" Else arrRst(r, 2) = "保底"   ':这个不需要了Cnt = 0
复制代码

强化.zip

18.58 KB, 下载次数: 8

评分

参与人数 1鲜花 +2 收起 理由
LSYYLW + 2 太强大了

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-17 21:45 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-19 15:55 | 显示全部楼层

首先谢谢大佬!!
不过我有一个疑问,其实我是想求模拟出来的次数。但是我把你的代码的次数改成100万次后,点击test每次出现的模拟次数结果还是相差比较大,比如会出现64次与93次这样的差距,请问是什么原因呢?

TA的精华主题

TA的得分主题

发表于 2020-3-19 16:13 | 显示全部楼层
“我把你的代码的次数改成100万次后”
是把什么次数改成100万次?
基础概率中强化成功的次数以及每次的强化百分比影响到最终次数,首次100%强化成功,保底也是100%强化成功,仅强化百分比会有差别,所以影响最大的还是基础强化时的成功次数。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-19 17:52 | 显示全部楼层
大灰狼1976 发表于 2020-3-19 16:13
“我把你的代码的次数改成100万次后”
是把什么次数改成100万次?
基础概率中强化成功的次数以及每次的强 ...

是我刚开始没看懂那个10000的意思,您的代码里好像没有做这个统计,我是想达到这样的效果,比如模拟了一次得出需要100次,然后再模拟一次得出103次....统计这个数据,做100万次的循环,得出他们的强化到100%所需要的的平均次数

TA的精华主题

TA的得分主题

发表于 2020-3-19 20:29 | 显示全部楼层
建议先用小数据测试,10万次在我这里还能接受,100万可能时间会很长。
  1. Sub test()
  2. Dim arrOri, FstStr$, BasStr$, LowStr$, s$, j&, Ttl&
  3. Dim Flag As Boolean, n As Byte, m#, Cnt&, LwCnt&, r&, MainCnt#
  4. Ttl = InputBox("请输入模拟次数")
  5. arrOri = [a2:l3]: LwCnt = arrOri(2, 9)
  6. For j = 1 To 4
  7.   FstStr = FstStr & String(arrOri(2, j), CStr(arrOri(1, j) * 100))
  8.   BasStr = BasStr & String(arrOri(2, j + 4), CStr(arrOri(1, j + 4) * 100))
  9.   If j > 1 Then LowStr = LowStr & String(arrOri(2, j + 8), CStr(arrOri(1, j + 8) * 100))
  10. Next j
  11. For j = 1 To Ttl
  12.   Flag = False: MainCnt = 0
  13.   Do
  14.     r = r + 1
  15.     n = -Int(-Rnd() * 100)
  16.     If Flag = False Then s = FstStr Else If Cnt < LwCnt Then s = BasStr Else s = LowStr: Cnt = 0
  17.     m = Mid(s, n, 1) / 100
  18.     If Flag = True Then If m = 0 Then Cnt = Cnt + 1 Else Cnt = 0
  19.     MainCnt = MainCnt + m
  20.     Flag = True
  21.   Loop Until MainCnt >= 1
  22. Next j
  23. [a6:b6] = Array("模拟次数", "平均强化次数")
  24. [a7:b7] = Array(Ttl, Format(r / Ttl, "0.00"))
  25. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,高效办公专列,每天发车

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

GMT+8, 2020-5-27 18:25 , Processed in 0.071033 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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