红包算法了解⼀下两种就可以了
1.红包算法火炬之光2法师加点图
代码⼤致意思是这样的:假设有100元钱,分给⼗个⼈。那么第⼀个⼈获得红包⼤⼩怎么计算呢?100/10 = 10元。这是期望值。从0.01到20的区间中(其中20=10乘以2)随机抽取⼀个数,就是第⼀个⼈获得红包的⼤⼩。假设第⼀个⼈获得了15元,那么剩下的85元平均分给9个⼈,这九个⼈平均获得红包⼤⼩为9.4元,那么第⼆个⼈的红包⼤⼩均匀分布于0.01元到18.80元的区间中,依次类推。算法保证最后⼀个⼈⾄少抽到0.01元。
红包的代码c++漂亮男人女主角
class LeftMoneyPackage
{
public:
LeftMoneyPackage(int size,int money);//初始化个数和⾦额
~LeftMoneyPackage();
double getRandomMoney();//红包算法
double getRandomMoney_1();//上下限红包算法能挣钱的方法
private:
double remainSize;//剩余的个数
double remainMoney;//剩余⾦额
//上下限法⽤⼀下参数
double SMIN;//下限
double SMAX;//上限
const int N =99;//⽤于rand();
};
LeftMoneyPackage::LeftMoneyPackage(int size,int money)//初始化
{
remainSize = size;
remainMoney = money;
佟丽娅离婚了吗
SMIN =(remainMoney / remainSize)*0.1;
SMAX =(remainMoney / remainSize)*1.9;
}
LeftMoneyPackage::~LeftMoneyPackage()
{
}
double LeftMoneyPackage::getRandomMoney(){//红包算法
if(remainSize ==1){//最后⼀个红包
remainSize--;
return(double)remainMoney;
}
double min =0.01;//最⼩值
//cout << "remainMoney : " << remainMoney << endl;
//cout << "remainSize : " << remainSize << endl;
double max = remainMoney / remainSize *2;//最⼤值
//cout << "max : " << max << endl;
double money =((rand()% N +1)/(double)(N +1))*max;//随机得到⼀个值
money = money <= min ?0.01: money;
money =floor(money *100)/100;
remainMoney -= money;
remainSize--;
return money;
}
2.需求分析与实现-带上下限对称随机红包算法
假设总⾦币数量为S1,总份数为P1,已发币量为S2,已发份数为P2,则:新乡景点
平均值为S1/P1,则随机下限SMIN=(S1/P1)*0.1,随机上限SMAX=(S1/P1)*1.9。
设⽣成的第n个随机币值为X,剩余获取总值为Y,则剩余币S1-S2=X+Y,当Y取最⼤值时X取最⼩值,当Y取最⼩值时X取最⼤值,同时X 应处于限定随机上下限(SMIN~SMAX)之间,得出:
X的随机范围为:MAX(S1–S2-(P1–P2-1)*SMAX,SMIN)<=X<=MIN(S1–S2–(P1–P2-1)*SMIN,SMAX)
double LeftMoneyPackage::getRandomMoney_1(){
if(remainSize ==1){
remainSize--;
return(double)remainMoney;
}
cout <<"上限 :"<<min(remainMoney -(remainSize -1)* SMIN, SMAX)<< endl;
cout <<"下限 :"<<max(remainMoney -(remainSize -1)* SMAX, SMIN)<< endl;
double money =((rand()% N +1)/(double)(N +1))*(min(remainMoney-(remainSize-1)* SMIN,SMAX)-max(remainMoney -(remainSize -1)* SMAX,SM IN))+max(remainMoney -(remainSize -1)* SMAX, SMIN);
remainSize--;
remainMoney -= money;
审查合同
return money;
}