输入红包总金额、人数、最小面额、最大面额、(第一个人默认拿到一块钱);
输出每个人获得的红包价格,以及获得红包最多的序号;
输入
输出
#include<iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
using namespace std;
int min(int a,int b);
double randf(double Max,double Min,int num,double total);
int main(){
int people,max_index;
double money,Max,Min,Max_v;
cout<<"输入总金额:";
cin>>money;
cout<<"输入总人数:";
cin>>people;
cout<<"输入最小值:";
cin>>Min;
cout<<"输入最大值:";
cin>>Max;
vector<float> hongbao_value=vector<float>(people);
hongbao_value[0]=1;
cout<<"抢红包结果如下:"<<endl;
cout<<"第 1个人抢到的红包金额为 1.00,红包剩余金额为 "<<fixed<<setprecision(2)<<money-1.00<<endl;
for(int i=1;i<people-1;i++){
money=money-hongbao_value[i-1];
hongbao_value[i]= randf( Max,Min,people-i+1,money);
cout<<"第 " <<i+1<<"个人抢到的红包金额为 "<<fixed<<setprecision(2)<<hongbao_value[i]<<",红包剩余金额为 "<<money-hongbao_value[i]<<endl;
}
hongbao_value[people-1]=money;
cout<<"第 " <<people<<"个人抢到的红包金额为 "<<fixed<<setprecision(2)<<money-hongbao_value[people-2]<<",红包剩余金额为 "<<"0.00"<<endl;
vector<int> zs_value=vector<int>(people);
for (int j = 0; j <people ; ++j) {
zs_value[j]=int(hongbao_value[j]*100);
}
Max_v=*max_element(zs_value.begin(),zs_value.end())*1.0/100;
max_index=max_element(zs_value.begin(),zs_value.end())-zs_value.begin();
cout<<"抢到红包金额最多的是"<<max_index+1<<"号";
return 0;
}
double randf(double Max,double Min,int num,double total)
{
double output=(double)(rand()/(double)(Max-Min))+(double)Min;
output=long(output*100)*1.0/100;
if ((total-output)<(Min*(num-1)))
return randf( Max,Min,num,total);
else return output;
}