微信红包程序

17

微信红包程序

微信红包程序问题描述:

随着微信红包的普及,现在很多人都喜欢通过微信红包来赠送给朋友或家人一些礼物。给定一个钱数m和人数n,将钱拆成几个吉利数,如5.20,6.66,8.88,9.99等,要求发出n个红包,分布比较均匀。

程序设计思路:

对于该问题的求解,我们主要运用到了随机数算法。假设有m元钱要发给n个人,我们可以先将m元钱拆成n个随机数,再按照一定的规则来分配。为了让分布比较均匀,我们可以采用以下的两个分配方案:

1.二倍均值法该方案是一种很常见的红包分配算法。在该算法中,我们先设定一个最小值min和一个最大值max,然后将剩余的钱m随机分配到min和max之间,再把m减去分配出去的钱数,更新min和max的值,以便下一次分配时使用。该算法的分配函数可以写成:

double Generate(double min,double max,double m){

double temp=(max-min)/2.0;

double ret=temp+min+1;

double r=fabs((double)rand()*1.0/RAND_MAX);

r=ret-2*r*temp;

if(r

r=min+1;

}

if(r>max-1){

r=max-1;

}

return r;

}

其中,min和max指的是当前拆分出来的吉利数的最大值和最小值,m为当前还需要分配的钱数。

2. 平均分配法该方案简单直接,就是将钱均分成n份,每份相等,但分界线不能随机。该算法的实现比较简单:

double Generate(double min,double max,double m){

double ret=m/num;

return ret;

}

根据以上两种算法,我们可以实现微信红包程序,代码如下:

include

include

include

include

using namespace std;

double Generate(double,double,double);

int main(){

double m;//钱数 int n;//人数 cout<<"请输入钱数:";

cin>>m;

cout<<"请输入红包个数:";

cin>>n;

double sum=0;

double* redpacket=new double[n];//创建数组来存储分配出去的钱数 double min=1.0;

double max=m*1.0/(double)n*2.0+1;//将max初始化为钱数m的2倍均值 for(int i=0;i

if(i==n-1){//如果是最后一个红包,分配剩余的钱数 redpacket[i]=m-sum;

}

else{//否则按照生成的随机数来分配钱数 redpacket[i]=Generate(min,max,m-sum);

}

sum+=redpacket[i];

cout<<"第"<

if(i==n-1){

break;

}

min=redpacket[i]*2;

max=m-sum*1.0/(n-i-1)*2;

}

delete[] redpacket;//释放数组 return0;

}

double Generate(double min,double max,double m){

double temp=(max-min)/2.0;

double ret=temp+min+1;

double r=fabs((double)rand()*1.0/RAND_MAX);

r=ret-2*r*temp;

if(r

r=min+1;

}

if(r>max-1){

r=max-1;

}

return r;

}

程序分析:

该程序主要分为两个部分,首先是生成n个具有一定范围内的随机数,然后根据这些随机数按一定的规则将钱数分配给n个人。程序执行的主要参数有:

m:人数。

n:钱数。

num:生成的随机数个数。

min:每个随机数可以取到的最小值。

max:每个随机数可以取到的最大值。

redpacket:存储分配得到的钱数的数组。

结论:

通过上述程序的运行,我们可以非常方便地实现微信红包的分配。通过随机分配算法的实现,能够有效地避免红包分配过于平均而导致的不公平问题。因此,通过这个简单的程序,我们可以享受到更加优质的红包处理体验。

红包c++算法

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 【实现微信红包效果】前端CSS实现微信红包打开效果(附源码下载)

下一篇 Java实现微信红包随机金额算法