最近在写一个随机的均衡的一个抽奖的算法,要保证不能连续抽中, 要均衡一点,不能超过指定的中奖数,当然也不能小于,必须是这个中奖数字,
下面是我写的一个,, 0表示不中,1表示中,就这样生成一串奖池..
个人数学比较差,,也没啥好的方式,所以贴出来求大家指点指点.
方法中的 c参数是奖池的总数量 p是这次奖池里面会抽中多少次.
public void init(int c,int p) throws Exception{
String [] arrs=new String[c];
p= p<0 ?0:p;// 控制p不小于0
if (c<=10 || c<=p ) {
return;
}
int count=0;
// 标志位
boolean f=true;
Random random=new Random();
for (int i = 0; i < c; i++) {
if (f) {
int ni=random.nextInt(c);
if (ni<=p) {
arrs[i]="1";
f=false;
count++;
}else {
arrs[i]="0";
}
}else {
arrs[i]="0";
if (count<p) {
f=true;
}
}
}
arrs[c-1]="0";
int xc=p-count;
if (xc>0) {
int j = 1;
for (int i = 0; i < xc; i++) {
for (; j < c-2; j++) {
if ("0" .equals(arrs[j]) && "0" .equals(arrs[j-1]) && "0".equals(arrs[j+1]) && "0".equals(arrs[j+2])) {
arrs[j]="1";
count++;
j++;
break;
}
}
}
}
System.out.println(arrs);
System.out.println("==========================");
System.out.println(count);
}
好吧,虽然知道贴出来也没人会来看的,因为我的访问量影响力太小了,但是我也不想放弃治疗啊……..