求问怎么按照概率生产随机数重复概率

2006年5月 .NET技术大版内专家分月排行榜第三
2008年10月 .NET技术大版内专家分月排行榜第一
2008年9月 .NET技术大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。JAVA 根据设置的概率生成随机数的方法
作者:布诺
字体:[ ] 类型:转载 时间:
本篇文章主要介绍了JAVA 根据设置的概率生成随机数的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文介绍了JAVA 根据设置的概率生成随机数的方法,分享给大家
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import java.util.R
public class RandomTest {
// String 可以为任意类型 也可以自定义类型
static Map&String, Integer& keyChanceMap = new HashMap&String, Integer&();
keyChanceMap.put("aaa", 500);
keyChanceMap.put("bbb", 1500);
keyChanceMap.put("ccc", 2000);
keyChanceMap.put("ddd", 3000);
keyChanceMap.put("eee", 3000);
public static void main(String[] args) {
Map&String, Integer& count = new HashMap&String, Integer&();
List&String& list = new ArrayList&&();
String item =
for (int i = 0; i & 10000; i++) {
item = chanceSelect(keyChanceMap);
list.add(item);
if (count.containsKey(item)) {
count.put(item, count.get(item) + 1);
count.put(item, 1);
for (String id : count.keySet()) {
System.out.println(id + "\t出现了 " + count.get(id) + " 次");
Random rand = new Random();
int num = rand.nextInt(10000);
System.out.print("最终选择的随机数为:"+list.get(num));
public static String chanceSelect(Map&String, Integer& keyChanceMap) {
if (keyChanceMap == null || keyChanceMap.size() == 0)
Integer sum = 0;
for (Integer value : keyChanceMap.values()) {
// 从1开始
Integer rand = new Random().nextInt(sum) + 1;
for (Map.Entry&String, Integer& entry : keyChanceMap.entrySet()) {
rand -= entry.getValue();
if (rand &= 0) {
String item = entry.getKey();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具按照概率生成随机数 - CSDN博客
按照概率生成随机数
现实中,人员学历一定不是均匀分布的,例如某高科技企业员工学历分布如下:
大学本科:40%
高中以下:10%
硕士研究生:5%
博士研究生:1%
如何按照这样的比例设定随机学历的出现概率呢?——控制随机数出现几率。
解决方案:
设定一个范围为0-99的随机数生成器:
生成0--39的概率是40%,与向量一中的0匹配,输出1;
生成40--63的概率是24%,与向量一中的40匹配,输出2;
生成64--83的概率是20%,与向量一中的64匹配,输出3;
生成84--93的概率是10%,与向量一中的84匹配,输出4;
生成94--98的概率是5%,与向量一中的94匹配,输出5;
生成99的概率是1%,与向量一中的99匹配,输出6
本文已收录于以下专栏:
相关文章推荐
实例一简单生成随机数:
int Random(double min, double max);
int main(...
有数字1,2,3,它们出现的概率分别为 0.2,0.3,0.5,现在要随机生成一个数字(1/2/3),使得满足上述概率,要怎样实现。
我们把这个问题一般化,就成了一个数学问题:
 假设有数字N1,N...
我这里并不是要讲“伪随机”、“真随机”这样的问题,而是关于如何生成服从某个概率分布的随机数(或者说 sample)的问题。比如,你想要从一个服从正态分布的随机变量得到 100 个样本,那么肯定抽到接近...
Matlab 中伪随机数的生成以及可复现的不放回等概率随机抽样在一些统计分析和优化实验中,需要用到随机数,可是我们又无法得到真正的随机数。平时使用的都是伪随机数,是拿软件模拟的随机数。
比如,系统时...
概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布使用Java中的SecureRandom.nextDouble()生成一个0~1之间的随机浮点数,然后使用反...
最近碰到一个大转盘的业务,奖品可根据数据后台灵活设置中奖概率,看起来挺简单的业务功能,但实现起来对我这个毫无经验的人来说并不容易,
后面又碰到一个根据后台概率随机获取不同概率的档位积分,前面是两个实际...
如果让你用C++来生成0——N-1之间的随机数,你会怎么做?你可能会说,很简单,看:
srand( (unsigned)time( NULL ) );
rand() % N;
仔细想一下,这个结...
概率算法中常常会用到随机数。一个好的随机数应该是随机,均匀,独立的。但是计算机受限于字长,计算速度以及算法本身的确定性,无法产生真正意义上的随机数。但是可以利用数学公式产生出符合概率统计特征的伪随机数...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)19被浏览648分享邀请回答function [P,delta]=getP(N)
for m=1:floor(N/2)
delta_m=0;
for q=0:floor(m*m/(2*m+1))
B=ceil(sqrt(2*m+1))-1;
else if q==floor(m*m/(2*m+1))
A=(ceil(sqrt(q*(2*m+1))));
B=m+1-ceil(sqrt(q*(2*m+1)));
D=1-ceil(sqrt(q*(2*m+1)))+floor(sqrt(q*(2*m+1)));
A=ceil(sqrt(q*(2*m+1)));
B=ceil(sqrt((q+1)*(2*m+1)))-ceil(sqrt(q*(2*m+1)));
D=1-ceil(sqrt(q*(2*m+1)))+floor(sqrt(q*(2*m+1)));
C=((-1)^(abs(mod(A,2)-mod(q,2))))*mod(B,2);
delta_m=delta_m+C-2*D;
delta_m=2*delta_m;
delta=delta+delta_m;
for m=floor(N/2)+1:N-1
delta_m=0;
for q=floor((2*m+1-N)*(2*m+1-N)/(2*m+1)):floor(m*m/(2*m+1))
if q==floor((2*m+1-N)*(2*m+1-N)/(2*m+1))
A=(2*m+1-N)*(2*m+1-N);
B=ceil(sqrt((q+1)*(2*m+1)))-(2*m+1-N);
D=1-min(2*m+1-N-floor(sqrt(q*(2*m+1))),1);
else if q==floor(m*m/(2*m+1))
A=(ceil(sqrt(floor(m*m/(2*m+1))*(2*m+1))))^2;
B=m+1-ceil(sqrt(floor(m*m/(2*m+1))*(2*m+1)));
D=1-ceil(sqrt(q*(2*m+1)))+floor(sqrt(q*(2*m+1)));
A=ceil(sqrt(q*(2*m+1)))^2;
B=ceil(sqrt((q+1)*(2*m+1)))-ceil(sqrt(q*(2*m+1)));
D=1-ceil(sqrt(q*(2*m+1)))+floor(sqrt(q*(2*m+1)));
C=((-1)^(abs(mod(A,2)-mod(q,2))))*mod(B,2);
delta_m=delta_m+C-2*D;
delta_m=2*delta_m;
delta=delta+delta_m;
sum=0.5+delta/(N*N-1);
P=((N+1)*(N+1))/(4*N*N)+sum*(N*N-1)/(2*N*N);
229 条评论分享收藏感谢收起115 条评论分享收藏感谢收起请教,按概率产生两个随机数该怎么写。 _ 综合讨论 - 按键精灵论坛
腾讯微博:
软件版本:2014.05软件大小:21.6M更新时间:07-04
软件版本:3.2.6软件大小:62.5M更新时间:09-27
软件版本:1.3.1软件大小:29.2M更新时间:09-29
软件版本:1.1.0软件大小:12.3M更新时间:12-29
查看: 590|回复: 16
请教一个问题,Randomizex = int(Rnd*2+1)这个代码是随机产生1和2的,是按50%概率产生的吧。我想让1的概率是51%,2的概率是49%,该怎么写呢。感谢。
剑侠勋章剑侠世界公测活动勋章过大年勋章俩小福娃给大家拜年啦!猴年勋章猴年专属“大圣”勋章双十一绝版纪念勋章双十一绝版纪念勋章抗战胜利70周年勋章抗战胜利70周年活动的专属勋章单身汪勋章单身贵族的专属勋章按键14周年庆纪念勋章按键14周年庆纪念勋章(360天)按键精灵开发者6级(新浪V认证)通过新浪微博加V后自动发放,并替换普通的认证6级勋章。 微博达人(90天)完成新浪微博加V的奖励,结合活动不定期开放申请。幸运草勋章(永久)商业小精灵限时活动勋章。马年勋章(360天) 马年纪念勋章(360天)年全勤论坛连续打卡签到365次以上(365天)月全勤论坛自然月(如8.1-8.31)签到满勤,系统会在月底自动判断发放。鹰眼勋章鹰眼注册用户专属勋章黄瓜勋章(永久)体验商业小精灵活动的奖励按键图书勋章尊贵的按键图书用户天使勋章天使一样的用户潜水员按键潜水员勋章按键明星按键明星勋章黄金之翼黄金之翼勋章活动狂人论坛活动狂人骨灰级按键用户3年以上的按键论坛用户龙年勋章(360天)龙年纪念勋章(360天)十周年勋章(360天)十周年纪念勋章兔年勋章(360天)兔年纪念勋章(360天)论坛GG按键论坛男性用户勋章小红帽对论坛提出良好建议(可向管理员申请)学有所成学有所成勋章,新手步入按键学堂的第一枚勋章
随机100个数字,随机到的数字大于51则..反之..就说这么多了。
承接各类脚本开发 有偿解决按键基础问题(可远程讲解)寻6级作者分摊单子,无需任何押金,开发全程不经我手!QQ: 《征途2S》和《千军》全部功能完全免费的脚本 ↓
x = int(Rnd*10000+1)
//TracePrint x
If x &= 1 and x &= 5068 Then
End If我有试过10000个数字拿来分,可不是想要的效果。就要两个数字按概率出可以吗。
抗战胜利70周年勋章抗战胜利70周年活动的专属勋章单身汪勋章单身贵族的专属勋章按键14周年庆纪念勋章按键14周年庆纪念勋章(360天)黄瓜勋章(永久)体验商业小精灵活动的奖励按键精灵开发者6级可通过提升认证等级来升级勋章:按键会员(月)按键会员绑定账号后自动赠送小红帽对论坛提出良好建议(可向管理员申请)
rs = Int(100*Rnd + 1)
If rs &= 51 Then '1 的概率为51%
&&&&TracePrint 1
ElseIf rs & 51 Then '2 的概率为49%
&&&&TracePrint 2
游戏、办公、网页、脚本辅助定制联系QQ: 淘宝店铺:
回复 这是100范围内分出来的,其实我意思是就1和2两个数范围内按51和49的比例产生随机数。有办法吗。谢谢。
按键精灵开发者6级可通过提升认证等级来升级勋章:
回复 四楼的就是51%出1..49%出2啊..
抗战胜利70周年勋章抗战胜利70周年活动的专属勋章单身汪勋章单身贵族的专属勋章按键14周年庆纪念勋章按键14周年庆纪念勋章(360天)黄瓜勋章(永久)体验商业小精灵活动的奖励按键精灵开发者6级可通过提升认证等级来升级勋章:按键会员(月)按键会员绑定账号后自动赠送小红帽对论坛提出良好建议(可向管理员申请)
TracePrint 概率随机(&1=51%,2=49%&)
Function 概率随机(参数)
&&&&Dim 分割参数, X, Y, I, 概率, rs, j
&&&&Y = 100
&&&&分割参数 = Split(参数, &,&)
&&&&If UBound(分割参数) & 0 Then
&&&&&&&&Redim TEMP_POR(UBound(分割参数))
&&&&&&&&Redim TEMP_V(UBound(分割参数))
&&&&&&&&For i = 0 To UBound(分割参数)
&&&&&&&&&&&&分割数据 = Split(分割参数(i), &=&)
&&&&&&&&&&&&If UBound(分割数据) & 0&&&& Then
&&&&&&&&&&&&&&&&TEMP_V(i) = 分割数据(0)
&&&&&&&&&&&&&&&&概率 = CLng(Replace(分割数据(1), &%&, &&))
&&&&&&&&&&&&&&&&If i = 0 Then
&&&&&&&&&&&&&&&&&&&&X = X +&&&& 概率
&&&&&&&&&&&&&&&&&&&&TEMP_POR(i) = X
&&&&&&&&&&&&&&&&&&&&Y = Y - 概率
&&&&&&&&&&&&&&&&Else
&&&&&&&&&&&&&&&&&&&&X = Round(X + Y * 概率 * 0.01, 0)
&&&&&&&&&&&&&&&&&&&&TEMP_POR(i) = X
&&&&&&&&&&&&&&&&&&&&Y = Y - Round(Y * 概率 * 0.01, 0)
&&&&&&&&&&&&&&&&End If
&&&&&&&&&&&&Else
&&&&&&&&&&&&&&&&TracePrint &出错,数据设置错误!&
&&&&&&&&&&&&&&&&Exit Function
&&&&&&&&&&&&End If
&&&&&&&&Next
&&&&&&&&Randomize
&&&&&&&&rs = Int(100 * Rnd + 1)
&&&&&&&&For j = 0 To UBound(TEMP_POR)
&&&&&&&&&&&&If j = 0 Then
&&&&&&&&&&&&&&&&If 0 & rs And rs &= TEMP_POR(j) Then
&&&&&&&&&&&&&&&&&&&&概率随机 = TEMP_V(j)
&&&&&&&&&&&&&&&&&&&&Exit Function
&&&&&&&&&&&&&&&&End If
&&&&&&&&&&&&ElseIf j = UBound(TEMP_POR) Then
&&&&&&&&&&&&&&&&If TEMP_POR(j) & rs And rs &= 100 Then
&&&&&&&&&&&&&&&&&&&&概率随机 = TEMP_V(j)
&&&&&&&&&&&&&&&&&&&&Exit Function
&&&&&&&&&&&&&&&&End If
&&&&&&&&&&&&Else
&&&&&&&&&&&&&&&&If TEMP_POR(j-1) & rs And rs &= TEMP_POR(j) Then
&&&&&&&&&&&&&&&&&&&&概率随机 = TEMP_V(j)
&&&&&&&&&&&&&&&&&&&&Exit Function
&&&&&&&&&&&&&&&&End If
&&&&&&&&&&&&End If
&&&&&&&&Next
&&&&&&&&If 概率随机 = && Then
概率随机 = TEMP_V(0)
&&&&&&&&TracePrint &出错,概率选择不能低于2个!&
&&&&&&&&Exit Function
&&&&End If
End Function
神梦科技 最后编辑于
游戏、办公、网页、脚本辅助定制联系QQ: 淘宝店铺:
火山发电厂
按键精灵开发者4级可通过提升认证等级来升级勋章:
RandomizeFor 200000
If rnd & 0.49 Then
a2 = a2 + 1
a1 = a1 + 1
End IfNextMessageBox FormatNumber(a1 / 20000, - 1 , - 1 )//要算很久, 等结果
小红帽对论坛提出良好建议(可向管理员申请)
回复 四楼的就是51%出1..49%出2啊.. qq 发表于
20:21:08 没注释新人看不来
抗战胜利70周年勋章抗战胜利70周年活动的专属勋章单身汪勋章单身贵族的专属勋章按键14周年庆纪念勋章按键14周年庆纪念勋章(360天)黄瓜勋章(永久)体验商业小精灵活动的奖励按键精灵开发者6级可通过提升认证等级来升级勋章:按键会员(月)按键会员绑定账号后自动赠送小红帽对论坛提出良好建议(可向管理员申请)
回复 TracePrint 概率随机(&1=51%,2=49%&)
复制代码返回1的概率是51%,返回2的概率是49%这么明显的例子,你也看不懂,我也无语了!
游戏、办公、网页、脚本辅助定制联系QQ: 淘宝店铺:
按键精灵开发者4级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章图灵勋章参与按键精灵验证码识别大赛奖励鹰眼勋章鹰眼注册用户专属勋章黄瓜勋章(永久)体验商业小精灵活动的奖励幸运草勋章(永久)商业小精灵限时活动勋章。
rnd本身就是个0-1的数字if rnd&=0.51 thenelseend if
最后编辑于}

我要回帖

更多关于 java随机数概率 算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信