最近在写一个随机的均衡的一个抽奖的算法,要保证不能连续抽中, 要均衡一点,不能超过指定的中奖数,当然也不能小于,必须是这个中奖数字,
下面是我写的一个,, 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); }
好吧,虽然知道贴出来也没人会来看的,因为我的访问量影响力太小了,但是我也不想放弃治疗啊........