1. 首页
  2. 编程语言
  3. C++ 
  4. 模拟丢硬币的随机算法

模拟丢硬币的随机算法

上传者: 2019-04-04 06:47:43上传 RAR文件 6.15MB 热度 65次
VC的随机算法不是准确的随机。因此自己想到用物理公司来计算丢硬币的正反面来实现真正的猜硬币。 考虑后发现,丢硬币的随机性由抛出时力度造成硬币的转速和初速度不同来决定。随机函数则没有这样的取决因素。于是我想到以按键的时间来决定初速度,转速为给定值。 物理模型为,站在黄鹤楼顶51.4m,硬币速度为1670转/秒,按键毫秒数为cm/s。硬币的转速一般不会那么快,不过我尝试过16.7转/秒,会导致按键连续20几个毫秒会是同一个结果,不够随机,故将转速人为加到1670(1670为武汉长江大桥的长度) 物理公式:t=(v0+√v0*v0+2gh)/g 硬币每转半圈会得到一面,因此落地时硬币转过的半圈数为奇数是一面,偶数是一面。 此模拟的优点是:连续两个毫秒并不一定就是一 正一反,比较随机。 缺点是如果毫秒数相同会得到同样的结果,不过丢硬币时如果两次初速度和转速完全一样,也会得到同样的结果。 VS2012开发,一些系统需要安装vcredist_x86。由于这套程序主要是重视公式,所以界面很简陋懒得弄了。 如果用此方法,限定不同的高度不同的转速和不同的初速度取值,也许可以叠加改进为2的整数次方的随机算法(比如3枚硬币,可以随出8种可能性) 正一反,比较随机。 缺点是如果毫秒数相同会得到同样的结果,不过丢硬币时如果两次初速度和转速完全一样,也会得到同样的结果。 VS2012开发,一些系统需要安装vcredist_x86。由于这套程序主要是重视公式,所以界面很简陋懒得弄了。 如果用此方法,限定不同的高度不同的转速和不同的初速度取值,也许可以叠加改进为2的整数次方的随机算法(比如3枚硬币,可以随出8种可能性)
用户评论