js模拟微信抢红包算法的讨论

时间:2021-6-2 作者:qvyue

春节在家无聊,抢红包的时候想起来,不如自己写一个微信抢红包算法来练练手。本以为是非常简单的一个事情,但真正写下来也算是一波三折,不禁感叹,在程序员的路上,我还是太嫩了啊!写这篇文章的原因也是想与广大网友集思广益,获得更好的学习。

基本思路

基本思路很简单,用户可以输入红包个数和红包总金额,然后点击生成按钮,就能生成一组随机数。效果图如下:

js模拟微信抢红包算法的讨论
Paste_Image.png

图方便,引入vue的数据绑定,代码如下:

随机数个数
随机数之和
  • {{item}}
var vi=new Vue({
                el:'#wrapper',
                data:{
                    num:0,
                    sum:0,
                    list:[],
                },
                methods:{
                    getRandom:function(){
                        var app=this
                        var isOk=false
                        while(!isOk){
                            for (var i = app.num-1,sum_2=0,exist=0,list=[]; i >= 0; i--) {
                                list[i]=parseFloat((Math.random()*(parseFloat(app.sum)-exist)).toFixed(2))
                                sum_2+=list[i]
                                exist+=list[i]
                            }
                            console.log(list)
                            if (sum_2==parseFloat(app.sum)) {
                                isOk=true
                                app.list=list
                            }
                        }
                    },
                },
            })

代码逻辑并不复杂,相信大家能够看得懂,就不多做解释了。我更想提的是一个bug,生成随机数后,会出现分布不均匀的现象。
下面附上5次随机生成结果:

js模拟微信抢红包算法的讨论
Paste_Image.png
js模拟微信抢红包算法的讨论
Paste_Image.png
js模拟微信抢红包算法的讨论
Paste_Image.png
js模拟微信抢红包算法的讨论
Paste_Image.png
js模拟微信抢红包算法的讨论
Paste_Image.png

相信大家发现了,前面生成的数会很大,后面生成的数会非常小,但检查代码并没有逻辑错误。如果广大网友如果有所想法,请在评论区留言,不胜感激!

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。