- dulinfan2024's blog
抢红包模拟器
- 1 month ago @
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ft first
#define sd second
#define mkp make_pair
#define pb push_back
typedef pair<int,int> pii;
typedef pair<int,pii> piii;
int type,timee,n,m,a[100005],sum[100005],minn[100005],maxx[100005];
void solve(){
int money=m;
for(int i=1;i<=n-1;i++){
int av=money/(n+1-i),avg=2*av;
a[i]=rand()%(avg-(i==n-1))+1;
money-=a[i];
sum[i]+=a[i];
minn[i]=min(minn[i],a[i]),maxx[i]=max(maxx[i],a[i]);
}
a[n]=money;
sum[n]+=a[n];
minn[n]=min(minn[n],a[n]),maxx[n]=max(maxx[n],a[n]);
}
double mm;
signed main(){
srand(time(0));
cout<<"欢迎来到发红包模拟器,本游戏严格按照微信发红包规则\n";
cout<<"请输入人数(小于100000):";cin>>n;
cout<<"请输入钱数(可输入2位小数):";cin>>mm;
cout<<"请输入游玩方式(1.只发一次,看钱数 2.发多次,看分析)\n";cin>>type;
if(mm*100<n){
cout<<"钱不够分。。。\n";
return 0;
}
m=mm*100.0;
memset(minn,0x3f,sizeof minn);
if(type==1){
solve();
int maxxx=1;
for(int i=2;i<=n;i++){
if(a[maxxx]<a[i])maxxx=i;
}
for(int i=1;i<=n;i++){
printf("第%d个抢:%.2lf元",i,a[i]/100.0);
if(a[i]==a[maxxx])cout<<" 手气最佳\n";
else cout<<'\n';
}
}
else{
cout<<"你要发几次:";cin>>timee;
for(int i=1;i<=timee;i++)solve();
for(int i=1;i<=n;i++){
printf("第%d个平均抢到%.2lf元,最少抢过%.2lf元,最多抢过%.2lf元\n",i,sum[i]/100.0/(timee*1.0),minn[i]/100.0,maxx[i]/100.0);
}
}
}
By signing up a HFOJ universal account, you can submit code and join discussions in all online judging services provided by us.