指定概率的算法 最少代码写出数组概率方法。数组每位表示该位的概率。int[] prob = {20,30,20,8,2,5,3,1,1,10}; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 既然楼主说的不是很清楚,那我就先yy一下吧!数组概率就是说,prob有10个元素,分别对应0到9的每一位;而prob的元素和为100,证明是同一个事件,就是说随机抽出一位,0到9的概率分别如prob所列。------------------------------------------思路:prob的元素映射成0到99的区间有以下关系:[20, 30, 20, 8, 2, 5, 3, 1, 1, 10] --> [20, 50, 70, 78, 80, 85, 88, 89, 90, 100]由于0到99的随机数是均匀分布的,所以每个元素占的长度,就是相当于被选中的概率。所以,只要看0到99的随机数random,在哪一个区间,就知道是哪个数字被选中了。下面代码主要就是【sum += prob[i]】和【if (random <= sum)】,其他都是假设条件。这里先假设prob的元素全部为10,这样输出结果更容易看出来他们之间的关系。楼主换成原来的prob就行。int[] prob = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10};int[] num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int sum = 0;int random = (int) (Math.random() * 100);for (int i = 0; i < prob.length; i++) { sum += prob[i]; // 概率段 if (random <= sum) { // 一大于,就是踏入了该概率段 System.out.println("random: " + random + " - " + num[i]); break; }} 不同版本JDK对正则表达式支持不同? 根据类名找出所有相关联的类 -- 工具 一个简单包装类的使用。 ie不能显示applet! 菜鸟遇到Java中画图的问题!求救! 如何将String类型转换为Clob以进行写操作呢? 错误,请进,在线 关于文件打开 初学者:为什么单独声明类建立object? javaSE Swing如何通过事件监听动态生成一个面板 读取XML 第一次用jdom包 求看写对否,报黄色感叹号,在线等 java网络编程,分包接收数据的疑惑,望大侠指点!
数组概率就是说,prob有10个元素,分别对应0到9的每一位;
而prob的元素和为100,证明是同一个事件,就是说随机抽出一位,0到9的概率分别如prob所列。------------------------------------------思路:
prob的元素映射成0到99的区间有以下关系:
[20, 30, 20, 8, 2, 5, 3, 1, 1, 10] --> [20, 50, 70, 78, 80, 85, 88, 89, 90, 100]
由于0到99的随机数是均匀分布的,所以每个元素占的长度,就是相当于被选中的概率。
所以,只要看0到99的随机数random,在哪一个区间,就知道是哪个数字被选中了。下面代码主要就是【sum += prob[i]】和【if (random <= sum)】,其他都是假设条件。
这里先假设prob的元素全部为10,这样输出结果更容易看出来他们之间的关系。楼主换成原来的prob就行。
int[] prob = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
int[] num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int sum = 0;
int random = (int) (Math.random() * 100);
for (int i = 0; i < prob.length; i++) {
sum += prob[i]; // 概率段
if (random <= sum) { // 一大于,就是踏入了该概率段
System.out.println("random: " + random + " - " + num[i]);
break;
}
}