a=(int)(10000/（20-step+1）)
b=(int)(10000×random)

2

3个回答

“20个数中必中三个”参考：从未知大小的n个数中取m个数，使各数被取出的概率相等

1

[code=java]
package choujiang;

public class hit {
public static int a[] = new int[21];
public static int b[] = new int[21];
public static int c[] = new int[21];
static boolean mark = false;// 记录是否发出一等奖
static int mark2 = 0;

``````boolean go_hit(int round) {// 伪随机方法
int fate = 0;
int rate = 0;
boolean temp = false;
if (mark == false) {
rate = (int) (10000 / (20 - round + 1));
fate = (int) (10000 * Math.random());
if (fate < rate) {
mark = true;
temp = true;
}
} else {
temp = false;
}
return temp;
}

boolean go_hit2(int round) {// 伪随机方法
boolean temp = false;
int fate = 0;
int rate = 0;
if (mark2 <= 3) {
rate = (int) ((3 - mark2) * 1000 / (20 - round + 1));
rate = (int) (rate / 0.95);
fate = (int) (1000 * Math.random());
if (fate <= rate) {
mark2 = mark2 + 1;
temp = true;
}
}
return temp;
}

public static void main(String[] args) {
int round = 0;
for (int i = 0; i < 10000000; i++) {// 模拟1000000次
hit see = new hit();
round = 1;
mark = false;
mark2 = 0;
while (round <= 20) {
if (see.go_hit(round)) {
a[round] = a[round] + 1;// 累计结果观察概率
// System.out.println("一等奖" + round);// 模拟抽奖中奖过程
} else {
if (see.go_hit2(round)) {
b[round] = b[round] + 1;
// System.out.println("二等奖" + round);
} else {
c[round] = c[round] + 1;
// System.out.println("三等奖" + round);
}

}
round++;
}
}
for (int i = 1; i < a.length; i++) {
System.out.print("a" + i + "is" + "   " + a[i] + " ");// 查看概率
System.out.print("b" + i + "is" + "   " + b[i] + " ");// 查看概率
System.out.print("c" + i + "is" + "   " + c[i] + " ");// 查看概率
System.out.println("*");
}
}
``````

}
[/code]

a1is 500753 b1is 1501149 c1is 7998098 *
a2is 499482 b2is 1497660 c2is 8002858 *
a3is 500282 b3is 1496837 c3is 8002881 *
a4is 500130 b4is 1502287 c4is 7997583 *
a5is 499141 b5is 1500685 c5is 8000174 *
a6is 499022 b6is 1504222 c6is 7996756 *
a7is 499067 b7is 1501090 c7is 7999843 *
a8is 499833 b8is 1501011 c8is 7999156 *
a9is 500068 b9is 1504420 c9is 7995512 *
a10is 500269 b10is 1499587 c10is 8000144 *
a11is 499821 b11is 1507425 c11is 7992754 *
a12is 497801 b12is 1504257 c12is 7997942 *
a13is 500746 b13is 1508028 c13is 7991226 *
a14is 498638 b14is 1502178 c14is 7999184 *
a15is 500871 b15is 1502920 c15is 7996209 *
a16is 500978 b16is 1508363 c16is 7990659 *
a17is 500327 b17is 1508092 c17is 7991581 *
a18is 500772 b18is 1503604 c18is 7995624 *
a19is 500923 b19is 1495613 c19is 8003464 *
a20is 501076 b20is 1422746 c20is 8076178 *

P=（3-已取个数）/（20-位置+1）来看 就算前面一个不取，那最后三个的概率都是100%，为什么能出现只选择2个的情况？？？
@Tiger_Zhao

0

Tiger_Zhao 完全不对。那个算法是先把前m个放入备选数组，然后对剩下的n-m个按照各自个概率去替换备选数组中的（随机）某个成员。最后剩下的备选数组成员才是结果。

``````public class fullhit{
public static int geted = 0;
public static boolean task = false;
public static int[] a = new int[21];
public static int[] b = new int[21];
public static int[] c = new int[21];

boolean first_hit(int round) {
boolean tempmark;
tempmark = false;
int rate = 0;
int fate = 0;
rate = (int) ((4 - geted) * 10000 / (20 - round + 1));
fate = (int) (10000 * Math.random() + 1);
if (fate <= rate) {
tempmark = true;
geted++;
}
return tempmark;
}

int socend_hit() {
int r;
int f;
int tempint = 0;
r = (int) 10000 / (4 - geted + 1);
f = (int) (10000 * Math.random());
if ((task == false) & (f <= r)) {
tempint = 1;
} else {
tempint = 0;
}
return tempint;
}

public static void main(String[] args) {
int round = 0;
int s = 0;// 模拟楼层计数器
int ta = 0;// 一等奖检测
int tb = 0;// 二等奖检测
boolean mark;// 检测：不符合每20个出现1个一等奖和3个二等奖就终止程序
fullhit fh = new fullhit();
for (int i = 1; i <= 10000000; i++) {//模拟10mX20个楼层
round = 0;
geted = 0;
ta = 0;
tb = 0;
mark = true;
while (round < 20) {
round++;
if (fh.first_hit(round)) {
if (fh.socend_hit() == 1) {
// 模拟一等奖；
a[round]++;
ta++;
} else {
// 模拟二等奖；
b[round]++;
tb++;
}
} else {
// 模拟三等奖；
c[round]++;
}
}
if (ta != 1) {
mark = false;
}
if (tb != 3) {
mark = false;
}
if (mark == false) {
System.out.println("error");
break;
}

}
for (int i = 1; i <= 20; i++) {
// 查看选中概率
System.out.print("a" + i + "的个数=" + a[i] + "("+a[i]/10000+"%。)|");
System.out.print("b" + i + "的个数=" + b[i] + "("+b[i]/10000+"%。)|");
System.out.print("c" + i + "的个数=" + c[i]+"("+c[i]/10000+"%。)");
System.out.println("|");
s = a[i] + b[i] + c[i];
}
System.out.println(s);
}
}
``````
``````运行结果：

a1的个数=499824(49%。)|b1的个数=1497290(149%。)|c1的个数=8002886(800%。)|
a2的个数=500605(50%。)|b2的个数=1498930(149%。)|c2的个数=8000465(800%。)|
a3的个数=500648(50%。)|b3的个数=1498506(149%。)|c3的个数=8000846(800%。)|
a4的个数=498906(49%。)|b4的个数=1499513(149%。)|c4的个数=8001581(800%。)|
a5的个数=499420(49%。)|b5的个数=1501569(150%。)|c5的个数=7999011(799%。)|
a6的个数=499057(49%。)|b6的个数=1499303(149%。)|c6的个数=8001640(800%。)|
a7的个数=499637(49%。)|b7的个数=1500461(150%。)|c7的个数=7999902(799%。)|
a8的个数=499751(49%。)|b8的个数=1497757(149%。)|c8的个数=8002492(800%。)|
a9的个数=499362(49%。)|b9的个数=1500223(150%。)|c9的个数=8000415(800%。)|
a10的个数=500398(50%。)|b10的个数=1501744(150%。)|c10的个数=7997858(799%。)|
a11的个数=500780(50%。)|b11的个数=1499652(149%。)|c11的个数=7999568(799%。)|
a12的个数=501419(50%。)|b12的个数=1500825(150%。)|c12的个数=7997756(799%。)|
a13的个数=499531(49%。)|b13的个数=1498670(149%。)|c13的个数=8001799(800%。)|
a14的个数=500125(50%。)|b14的个数=1499623(149%。)|c14的个数=8000252(800%。)|
a15的个数=499369(49%。)|b15的个数=1500529(150%。)|c15的个数=8000102(800%。)|
a16的个数=500528(50%。)|b16的个数=1499332(149%。)|c16的个数=8000140(800%。)|
a17的个数=500256(50%。)|b17的个数=1501182(150%。)|c17的个数=7998562(799%。)|
a18的个数=500026(50%。)|b18的个数=1500794(150%。)|c18的个数=7999180(799%。)|
a19的个数=500726(50%。)|b19的个数=1501076(150%。)|c19的个数=7998198(799%。)|
a20的个数=499632(49%。)|b20的个数=1503021(150%。)|c20的个数=7997347(799%。)|
s=10000000
``````
0

50%不中奖rn25%优惠卷(优惠有好几种这个可以直接随机的)rn25%红包rnrn其中红包在25%的的比例，不是整个比例rn1、90到100的红包6万分之一rn2、80到89.99的红包5万分之一rn3、50到79.99的红包4万分之一rn4、30到49.99的红包3万分之一rn5、20到29.99的红包2万分之一rn6、10到19.99的红包1万分之一rn7、5到9.99的红包五千分之一rn8、3到4.99的红包两千分之一rn9、2到2.99到红包五百分之一rn10、1到1.99的红包一百分之一rn11、其余都是0.99以下rn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/26.gif][/img]rnrn求大神.....

6个箱子 rn鼠标点击相应箱子 即可获得随机奖励rnrn规则如下:rn5金币每日中奖人数为200人rn10金币每日中奖人数为100人rn30金币每日中奖人数为50人rn50金币每日中奖人数为10人rn100金币每日中奖人数为5人rnrn大家给点意见 （有相应的代码最好了）~_~rn

MFC抽奖小游戏 随机抽奖

/** * 奖励金（礼物）模型 * Created by tong.hua on 2017-10-26. */ public class BountyItem extends ToString{ private static final long serialVersionUID = -4046365922597449030L; //礼物编号 private int

1-33中随机抽取6个，让其6个数字不重复,用js输出

js随机抽奖程序
js实现随机抽奖程序，可以自动随机抽取想要的结果。 随机抽奖程序，可以控制随机抽奖结果

Excel2007随机抽奖程序
EXCEL2007随机抽奖程序，可自定义编辑，使用方便

js随机抽奖

<span style="color:#333333;">本套课程主要讲解定时器的本身的相关原理及方法，以及使用定时器制作一些交互效果,如随机抽奖、自动书写代码、匀速运动等</span>

DELPHI 随机抽奖软件

Authorware随机抽奖作品

public Integer getPrizeResult() { // 10W内的随机数 try { while (true) { int index = new Random().nextInt(100001); log.info("【随机数】"+index);

public String turntable(int customerId){ //查询用户积分 CustomerScore userscore = customerScoreDao.findByCustomerId(customerId); //积分不足 if(null==userscore) return ActivityResponse.backFail(Activi
jQuery实现随机抽奖

jquery图片随机抽奖
jquery图片随机抽奖
JS+JQ随机抽奖代码
JS+JQ随机抽奖代码： 可以实现随机抽奖功能
jquery随机抽奖.zip
jquery随机抽奖是一款基于jquery css3实现的随机抽奖程序特效代码。 jquery随机抽奖演示图：                                                        点击查看演示：