随机均衡分配,抽奖的一个随机算法

最近在写一个随机的均衡的一个抽奖的算法,要保证不能连续抽中, 要均衡一点,不能超过指定的中奖数,当然也不能小于,必须是这个中奖数字,


下面是我写的一个,, 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);
		
	}


好吧,虽然知道贴出来也没人会来看的,因为我的访问量影响力太小了,但是我也不想放弃治疗啊........

猜你喜欢

转载自blog.csdn.net/u012930316/article/details/78829067