各种系统源码下载http://www.imaxclub.xyz
/*
* 仿微信获取红包
* @param sum 总金额
* @param num 红包个数
* @return int
*/
int getRedPacket(int sum, int num)
{
// 主要参考:https://www.zhihu.com/question/22625187 (答主陈鹏的回答)
// 总金额 sum = 100
// 红包个数 num = 20
// 每人至少得一个,则剩余随机可用金额 sum2 = sum - num
// 平均数 avg = sum2 / num
// 随机最大值 avgMax = 平均数 * 2
// 红包金额 = rand(0, avgMax) + 1
// 微信的话:红包金额 = rand(0, avgMax) + 0.01
if (num <= 1)
{
return sum;
}
int sum2 = sum - num;
int avg = sum2 / num;
int avgMax = avg * 2;
if (avgMax <= 0)
{
avgMax = 2;
}
int iRet = Common::CUtil::myRand(0, avgMax) + 1;
return iRet;
}
int main(int argc, char* argv[])
{
int sum = 100;
int num = 20;
int allSum = 0;
for (int i = 1; i <= 20; ++i)
{
int value = getRedPacket(sum, num);
printf("i=%d sum=%d num=%d value=%d allSum=%d \n", i, sum, num, value, allSum);
sum -= value;
num -= 1;
allSum += value;
}
printf("allSum=%d", allSum);
}