算法题:使得随机数出现0~X之间的概率从X变为X平方
2022/2/28 11:22:59
本文主要是介绍算法题:使得随机数出现0~X之间的概率从X变为X平方,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、先证明随机数出现0~X的概率是X
public static void main(String[] args) { for (int i = 1; i < 10; i++) { test(i / 10d); } } public static void test(double x) { int count = 0; int size = 10000; for (int i = 0; i < size; i++) { if (Math.random() <= x) { count++; } } System.out.println(x + "区间内出现的概率:" + (count * 1.0 / size)); }
控制台:
0.1区间内出现的概率:0.0992 0.2区间内出现的概率:0.2015 0.3区间内出现的概率:0.3023 0.4区间内出现的概率:0.3938 0.5区间内出现的概率:0.5021 0.6区间内出现的概率:0.5979 0.7区间内出现的概率:0.6958 0.8区间内出现的概率:0.7983 0.9区间内出现的概率:0.8993
2、分析X平方概率的意思,首先0~1之间,前闭合后不闭(前包后不包)。所以除了0,其他都是小数。
小数的平方会比原值更小,也就是说这个概率是变小了
3、X的平方,相当于出现了两次随机数行为,并且两次都需要满足一定的条件
4、条件的区间是0~X,也就是说要使得出现两次随机数的行为,同时(&&)满足出现在区间0~X之间
5、反向思维,两次随机数行为都出现在区间0~X之间。即可等价为至少一次随机数行为出现在X~1之间
6、两个数之间至少有一个数满足一定条件,则可取MAX。相当于至少要有1次随机数大于X才满足
7、从结果再反推,MAX要出现在0~X区间,则必须两次随机数都在0~X区间,单次随机数出现在区间的概率是X,则两次都满足的情况下是X*X,即X的平方
8、代码验证
public static void main(String[] args) { for (int i = 1; i < 10; i++) { test(i / 10d); } } public static void test(double x) { int count = 0; int size = 10000; for (int i = 0; i < size; i++) { if (Math.max(Math.random(), Math.random()) <= x) { count++; } } System.out.println(x + "区间内出现的概率:" + (count * 1.0 / size)); }
控制台:
0.1区间内出现的概率:0.0112 0.2区间内出现的概率:0.0411 0.3区间内出现的概率:0.092 0.4区间内出现的概率:0.1554 0.5区间内出现的概率:0.2516 0.6区间内出现的概率:0.3593 0.7区间内出现的概率:0.4917 0.8区间内出现的概率:0.6451 0.9区间内出现的概率:0.8096
这篇关于算法题:使得随机数出现0~X之间的概率从X变为X平方的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南