微信,QQ抢红包算法(Java版)

     当我们平时在使用微信,QQ抢红包时,总会觉得很神奇,于是今天抽空研究了下其算法,然后参考了一些博客及自己的理解,写了一个算法。

      规则:

      1.所有人抢到金额之和等于红包金额,不能超过,也不能少于。

      2.每个人至少抢到一分钱。

      3.要保证所有人抢到金额的几率相等。

      算法描述:

    1)首先将所有金额m换算成最小单位分,其值为m:如1元=100分(m=100),4.23=423分(m=423)。

      2)然后在区间(0,m)上得到(n-1)个随机数,即将所有金额随机划分成了n份。n为红包个数,即抢  红包的人数。

      3)将得到的随机数放入放入list,并在list中加入0和m两个元素(主要是为了方便后面计算金额),然后对list进行排序。

代码示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 抢红包算法
 * @author Tony
 * 首先将所有金额m换算成最小单位分:如1元=100分,4.23=423分
 * 然后在区间(0,m)上得到(n-1)个随机数,即将所有金额随机划分成了n份。n为红包个数。
 */
public class RedPackets{

	public static void main(String[] args) {
		int peopleCount = 10;
		int totalMoney = 100;
		getRandomMoney(peopleCount, totalMoney);
	}
	
	private static void getRandomMoney(int peopleCount, int totalMoney) {
		
		List list = new ArrayList();
		
		for(int i=0; i

运行结果:

第1个人抢到:6
第2个人抢到:11
第3个人抢到:13
第4个人抢到:2
第5个人抢到:20
第6个人抢到:4
第7个人抢到:5
第8个人抢到:10

第9个人抢到:20

第10个人抢到:9

当然,这个算法还有优化的地方,欢迎在评论区讨论。

你可能感兴趣的:(Java相关)