当前位置 博文首页 > pzjdsg666的博客:微信抢红包随机算法
做这东西,要讲究2个原则:平均+公平。
现在,我们先来介绍一下随机算法:
#include<cstdlib>
#include<ctime>
#include<iostream>
using namespace std;
int main(){
srand(time(0));//产生随机数种子
for(int i=1;i<=10;i++)
cout<<rand();
return 0;
}
运行结果:
27045 32245 24474 7326 18083 20626 22847 20602 26863 20307
27042 21496 6610 16031 7769 16699 19735 23530 10351 264
所以,代码如下:
#include<bits/stdc++.h>
using namespace std;
const int int_max=2147483647;
int n,m,maxk,maxi,mink=int_max,mini=int_max;
int main(){
srand(time(0));
cin>>n>>m;
for(int i=1;i<m;i++){
int v=2*n/m-1;
int k=rand()%v+1;
if(k>maxk){
maxk=k;
maxi=i;
}
if(k<mink){
mink=k;
mini=i;
}
cout<<"第"<<i<<"个人抢到"<<k<<"元"<<endl;
n-=k;
}
cout<<"第"<<m<<"个人抢到"<<n<<"元"<<endl<<endl;
if(n>maxk){
maxk=n;
maxi=m;
}
if(n<mink){
mink=n;
mini=m;
}
cout<<"手气之王是:"<<endl;
cout<<"第"<<maxi<<"个人抢了"<<maxk<<"元,继续努力哟!"<<endl<<endl;
cout<<"手气弱者是:"<<endl;
cout<<"第"<<mini<<"个人只抢了"<<mink<<"元,要加油哟!"<<endl<<endl;
return 0;
}
?