下午在开会期间 济南公司的同事发了一道题在 QQ群上 然后我一看 这题按常规来解的话还不太好弄 但是用 Monte Carlo 蒙特卡罗 算法 计算机来算则是异常的简单(但是只能无限接近答案)
正方形的面积是 20
解题思路 就是尽可能的随机撒越多越好的点 然后就统计落在阴影处的点数占总数的比例. 可以通过和圆心距离来判断是否在圆内 圆上还是圆外. 第一次判断是判断点是不是在1/4圆外 然后第二次就判断是否在中间一整个圆内.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ' HelloACM.com Const N = 1000000 C = 0 Randomize For i = 1 To N x = Rnd y = Rnd r = Sqr(x * x + y * y) If (r >= 1) Then ' 在四分之一圆外 r = Sqr((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5)) If (r < = 0.5) Then ' 距离圆心小于 0.5 C = C + 1 End If End If Next Msgbox C / N * 20 |
' HelloACM.com Const N = 1000000 C = 0 Randomize For i = 1 To N x = Rnd y = Rnd r = Sqr(x * x + y * y) If (r >= 1) Then ' 在四分之一圆外 r = Sqr((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5)) If (r < = 0.5) Then ' 距离圆心小于 0.5 C = C + 1 End If End If Next Msgbox C / N * 20
这种算法有个缺点就是收敛慢 需要很多的点才可以得到一个近似的答案. 上面VBSCRIPT能在短时间内得到一个很不错的近似值了.
英文: https://helloacm.com/area-of-the-shadow-the-monte-carlo-solution-in-vbscript/
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK