您的位置:首页 > 编程语言 > C语言/C++

[置顶] 微信抢红包的算法实现(C++)

2016-07-04 17:28 471 查看
目前只能实现对于整数的钱数的红包的实现,经过随机数从而实现随机人抢红包的算法

/*
vs 2013
wk
*/

#include<iostream>
#include<time.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
//min 默认最小金额 1=0.01元
//max 默认最大金额 20000 = 200 元
//total 总钱数
//num 总人数
long long CalcRandomValue(long long min, long long max, long long total, long long num)
{
if (num == 1)
{
return total;
}
//跟新随机种子
srand((unsigned int)time(NULL));

//锁定本次随机范围
long long low = (total - (num - 1)*max) < min ? min : (total - (num - 1)*max);
long long high = (total - (num - 1)*min) > max ? max : (total - (num - 1)*min);

long long ave = (total / num) > 1 ? (total / num) : 1;
//调整上限
if (high > 2 * ave)
{
high = 2 * ave;
}

//生成随机值
long long ram = rand() % high;

//防止溢出
if (ram < low)
ram = low;

if (ram > high)
ram = high;

return abs(ram);
}

long long qianghongbao(long long total,long long num )
{
if (total > 0)
{
if (num == 1)
{
printf("发红包金额%ld\n", total);
}
total *= 100;
long long low = 1;
long long max = 20000;
printf("红包总金额 %ld元\n", total/100);
printf("抢红包总人数 %ld\n", num);
long long ret = 0;
int i = 1;
float big = 0.0;
int person = 0;
while (num > 0)
{
ret = CalcRandomValue(low, max, total, num);
float ram = ret / 100.0;
printf("第%i个人抢到了%lf元\n", i,ram);
if (ram > big)
{
big = ram;
person = i;
}
total -= ret;
--num;
++i;
}
printf("第%d个人抢了%f元,手气最佳\n", person, big);
}
return -1;
}

int main()
{

qianghongbao(11, 10);
system("pause");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: