[置顶] 微信抢红包的算法实现(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;
}
/*
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;
}
相关文章推荐
- 用C++实现简易的文本编辑器
- 声明类 之后定义类函数 注意析构函数
- ZJUT-OJ Password Intercept and capture
- Windows ,获取硬盘物理序列号(VC++)
- 一段C语言和汇编的对应分析,揭示函数调用的本质
- [置顶] C语言变参函数的实现 参考代码
- C++ 抽象类二(抽象类的基本语法)
- C预处理器和C库
- c++ zbar opencv 二维码识别
- 【c++程序】十六进制转换十进制
- C++检测一个文件是否存在
- Boost之字符串
- C++之类和对象的使用(三)
- C语言5种存储区域
- C、C++获取文件大小(占用字节数)
- C++ 带默认形参值的函数
- 网狐全局定义,用户数据,更改要慎重!
- C语言使用回溯法解旅行售货员问题与图的m着色问题
- 多线程内存池基本框架(C++)
- C++ 继承、函数重载