ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 335|回复: 9

[分享] 无聊的很,做了个猜大小的游戏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-6 22:17 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub test()
  2.     Dim myarr(1 To 10, 1 To 10) As Integer
  3.     Range("A1", "J10").Interior.Color = xlNone
  4.     For i = 1 To 10
  5.         For j = 1 To 10
  6.             myarr(i, j) = (i - 1) * 10 + j
  7.         Next
  8.     Next
  9.     [a1].Resize(10, 10) = myarr
  10.    
  11.     Dim rndNum As Integer
  12.     rndNum = WorksheetFunction.RandBetween(1, 100)
  13.    
  14.     Dim greenF, redF, yellowF
  15.     greenF = False   '猜对标记绿色
  16.     redF = False     '涂红标记,代表猜大
  17.     yellowF = False  '涂黄标记,代表猜小

  18.     Dim myGuess As Integer
  19.     Dim myRow As Integer, myCol As Integer
  20.     Dim oldRedRow As Integer, oldRedCol As Integer
  21.     Dim oldYellowRow As Integer, oldYellowCol As Integer
  22.    
  23.     i = 0
  24.     Do
  25.         myGuess = CInt(InputBox("输入你猜的数(1-100):"))
  26.         i = i + 1
  27.         myRow = (myGuess - 1) \ 10 + 1
  28.         myCol = myGuess Mod 10: If myCol = 0 Then myCol = 10
  29.         
  30.         If myGuess > rndNum Then
  31.             If redF Then Cells(oldRedRow, oldRedCol).Interior.Color = xlNone
  32.             Cells(myRow, myCol).Interior.Color = RGB(255, 0, 0)
  33.             redF = True         '红标记
  34.             oldRedRow = myRow: oldRedCol = myCol
  35.             
  36.             MsgBox "你猜的大了"
  37.             
  38.         ElseIf myGuess < rndNum Then
  39.             If yellowF Then Cells(oldYellowRow, oldYellowCol).Interior.Color = xlNone
  40.             Cells(myRow, myCol).Interior.Color = RGB(255, 255, 0)
  41.             yellowF = True      '黄标记
  42.             oldYellowRow = myRow: oldYellowCol = myCol
  43.             MsgBox "你猜的小了"
  44.             
  45.         Else
  46.             Cells(myRow, myCol).Interior.Color = RGB(0, 255, 0)
  47.             greenF = True       '绿标记
  48.             MsgBox "猜对了," & "这个数是" & rndNum & ",你猜了" & i & "次"
  49.         End If
  50.         
  51.     Loop Until greenF
  52. End Sub
复制代码


猜大小.png

猜大小.zip

16.71 KB, 下载次数: 25

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-7 13:34 | 显示全部楼层
本帖最后由 jaxxcyh 于 2024-8-7 23:30 编辑

重发一个修正版。可以模拟二分法猜数过程,可对猜对的次数的频率进行统计,以统计图方式直观展现。

二分法猜数的统计结果.png

电脑模拟二分法猜大小的统计结果(修正版).zip

33.7 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-8-7 08:45 | 显示全部楼层
一百个数,按二分法,理论上最多7次可以猜到。
我有个问题,如果猜的次数多了,比如一万次,都个数出现的概率平均,平均猜到的次数是多少呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-7 10:23 | 显示全部楼层
本帖最后由 jaxxcyh 于 2024-8-7 10:33 编辑
titi012 发表于 2024-8-7 08:45
一百个数,按二分法,理论上最多7次可以猜到。
我有个问题,如果猜的次数多了,比如一万次,都个数出现的 ...

你都知道二分法,难道还不知道求对数?
log(2,10000)结果约为14,最多14次。
如果求猜对的平均次数,我觉得1-14次的可能性都存在,但是不是n次试验,每种次数均等出现还是有权重就不知道了(比如14次这个就应该偏少,因为取的是log(2,10000)的结果13.277......的近似值。
不妨做个电脑模拟程序,统计一下看看。

TA的精华主题

TA的得分主题

发表于 2024-8-7 11:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
考虑来个反过来的,心中想个数据,让电脑猜猜猜。

TA的精华主题

TA的得分主题

发表于 2024-8-7 11:11 | 显示全部楼层
还记得很多年前搞Autodesk CAD二开的时候,无聊了还做了一个战机游戏,现在都不知道丢那里去了。

TA的精华主题

TA的得分主题

发表于 2024-8-7 13:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jaxxcyh 发表于 2024-8-7 10:23
你都知道二分法,难道还不知道求对数?
log(2,10000)结果约为14,最多14次。
如果求猜对的平均次数,我 ...

可能我没说清楚啊,
都按2分法来猜,每个数的猜到的次数是确定的,比如50,一次,75,两次,....然后统计一下平均的次数。
这个比随机猜要少很多的。
然后还有没有比这个更少的次数的方法呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-7 13:55 | 显示全部楼层
titi012 发表于 2024-8-7 13:49
可能我没说清楚啊,
都按2分法来猜,每个数的猜到的次数是确定的,比如50,一次,75,两次,....然后统 ...

2楼有统计,100内的猜数游戏进行了2000轮,猜对次数平均为5.8次。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-7 23:45 | 显示全部楼层
titi012 发表于 2024-8-7 08:45
一百个数,按二分法,理论上最多7次可以猜到。
我有个问题,如果猜的次数多了,比如一万次,都个数出现的 ...

1-100范围内猜数,最高次数不是7次,而是6次。
比如考虑极端情况:目标数是100
第1次:1-100,猜50,小了
第2次:51-100,猜75,小了
第3次:76-100,猜88,小了
第4次:89-100,猜94,小了
第5次:95-100,猜97,小了
第6次:98-100,猜99,小了,此时就可直接得出结论,要猜的目标数一定是100。所以不需要第7次猜数了。

TA的精华主题

TA的得分主题

发表于 2024-8-8 02:12 | 显示全部楼层
参与一下,分享一位老师做的窗体数字游戏,可猜4位数的游戏。
屏幕截图 .png

数字游戏.zip

25.58 KB, 下载次数: 8

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 10:55 , Processed in 0.051192 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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