首页 > 编程语言 >分享一个js 抢红包随机算法,其他语言思路也一样

分享一个js 抢红包随机算法,其他语言思路也一样

时间:2024-08-31 18:26:49浏览次数:12  
标签:sy max 抢红包 金额 arr js 算法 objs Math

直接调用这个方法就行 传递q(金额)和r(人数就行)
保证人均最少一分钱
当剩余金额大于80%的时候,会在金额20%的区间内取大红包随机分配;
基础分配规则为,按照每人可以随机5次的要求,得出每次随机的金额,随机分给其中一人

function fen(q, r) {
//q=红包金额 单位元,最小0.01 r=分配人数
if (typeof (objs) == 'undefined') {
if (q == undefined || r == undefined || q100<r || q<0.01) {
console.log('参数错误')
return;
}
objs = {
money: q, //红包金额
num: r, //参与人数
arr: [], //返回结果
smoney: q * 100, //金额转成分
sy: q * 100, //剩余分配金额
number:0 //执行次数
}
//保底一分
for (var i = 0; i < objs.num; i++) {
objs.smoney -= 1;
objs.sy -= 1;
objs.arr.push(1)
}
}
objs.number++;
var max = objs.sy;
var f = 0;
//分配算法,等额金额保证让没人有五次机会 首次获取20%的金额当大头
var suo = (objs.smoney / objs.num / 5)
if (objs.sy > objs.smoney
0.8) {
max = objs.smoney * 0.2;
f = Math.floor(Math.random() * max) + 1
}else if (objs.sy > suo) {
max = suo;
f = Math.floor(Math.random() * max) + 1
} else {
f = max;
}
objs.sy -= f;
objs.arr[Math.floor(Math.random() * objs.arr.length) ] += f;
if (objs.sy > 0) {
//没分完重复执行
fen()
} else {
for (var i = 0; i < objs.num; i++) {
objs.arr[i] = parseFloat(objs.arr[i] / 100)
}
//返回结果,重置参数
console.log('结果:'+objs.arr, '执行次数:' + objs.number)
objs = undefined;
}
}
结果示例,如果平均每人分配不到一分钱可是会报错哦

标签:sy,max,抢红包,金额,arr,js,算法,objs,Math
From: https://www.cnblogs.com/mufuhu/p/18390577

相关文章

  • 基于分解的多目标进化算法MOEA/D
    本文基于MOEA/D论文进行部分翻译、解释,是学习笔记的一部分。结构和原文完全相同,大家可以用于辅助阅读论文。如有错误,欢迎指出,感谢!原文:MOEA/D:AMultiobjectiveEvolutionaryAlgorithmBasedonDecomposition. QingfuZhang,SeniorMember,IEEE,andHuiLiAbstract......
  • Vue期末考试速成复习指南附编程题(js开发基础+路由+Pinia)
    前文:本文参考书籍《Vue.js前端开发实战(第二版)》--黑马程序员/编著重点在于本科期末速成和0基础入门目录:一.初识Vue1.包管理工具:npmyarn2.创建Vue项目二.js开发基础1.什么是单文件组件?2.单文件组件基本结构3.切换页面显示组件3.数据绑定与输出4.Vue引入Html页面5.......
  • 算法题技巧之“枚举右维护左“--套路详细讲解带例题和易懂代码(Python,C++)
    本文参考:灵茶山艾府-力扣(LeetCode)        分享丨【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)-力扣(LeetCode)    本文主要讲解关于”枚举右维护左“这个刷算法题的技巧,包括简单的原理讲解和两个简单的例题(之后我也会总......
  • 马铃薯叶片病害识别系统+Python+图像识别+人工智能+深度学习+卷积神经算法+计算机课设
    一、介绍马铃薯叶片病害识别系统。本项目使用Python作为主要开发语言,基于TensorFlow等深度学习框架搭建ResNet50卷积神经算法网络模型,通过对收集到的3种常见的马铃薯叶片病害数据集('早疫病','健康','晚疫病')进行训练得到一个识别精度较高的模型,然后将模型以H5格式文件形式保存......
  • 【华为OD机试真题E卷】31、最大社交距离 | 机试真题+思路参考+代码分析(E卷复用)(C语言、
    文章目录一、题目......
  • 阿尔茨海默病症识别+图像识别Python+人工智能+深度学习+TensorFlow+机器学习+卷积神经
    一、介绍阿尔茨海默病症识别。使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对病症图片4种数据集进行训练['轻度痴呆','中度痴呆','非痴呆','非常轻微的痴呆'],最终得到一个识别精确度较高的模型。然后使用Django框架......
  • 模板方法模式:如何实现同一模板框架下的算法扩展?
    模板方法模式的原理和代码实现都比较简单,在软件开发中也被广泛应用,但是因为使用继承机制,副作用往往盖过了主要作用,所以在使用时尤其要小心谨慎。一、模式原理分析模板方法模式原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的......
  • 算法专项-基础100题
    题目1:求和a,b=map(int,input().split())print(a+b)题目2:偶数奇数打印list=[]foriinrange(1,100):ifi%2==0:#if%2!=表示奇数list.append(i)foriinlist:#list转换为strprint(i,end='')题目3:偶数奇数求和sum=0foriinrange(1,100):ifi......
  • [luoguP4051/JSOI2007] 字符加密
    题意给定字符串\(s\),输出将\(s\)的所有循环同构的字符串排序后,每个字符串的末尾的字符。sol因为要对循环同构的字符串排序,因此我们可以将\(s\)复制一遍,拼在后面,计算\(sa\),满足\(sa_i\len\)的所有元素的相对位置即为排序后字符串的相对位置,输出即可\(sa\)的计算详见......
  • 分水岭算法简介
    分水岭算法是一种经典的图像分割技术,广泛应用于图像处理领域。它的名称源自地理学中的“分水岭”概念,即在地形中,水从高处流向低处,最终汇聚成河流的过程。在图像分割中,分水岭算法将灰度图像视为地形,将像素值看作海拔高度。该算法模拟水从各个局部最小值(即山谷)向外扩展,最终在山峰......