首页 > 其他分享 >JS实现红包分配(每个人至少1分钱)

JS实现红包分配(每个人至少1分钱)

时间:2023-10-09 21:27:23浏览次数:45  
标签:分钱 const 红包 人分 金额 JS totalPeople totalAmount

要实现红包分配,保证每个人至少分到1分钱,可以使用以下算法:

  1. 将红包总金额以及要分配的人数作为输入参数。

  2. 首先,生成一个(人数-1)范围内的随机数,表示第一个人分到的金额。确保至少会有一个人分到1分钱。

  3. 然后,将剩余金额(总金额减去第一个人分到的金额)作为新的红包总金额。

  4. 依次随机生成每个人分到的金额,直到最后一个人。每个人分到的金额应该在剩余的红包金额和剩余人数之间随机分配。

  5. 最后一个人分到的金额就是剩下的红包金额,确保最后一个人至少分到1分钱。

下面是一个示例的JavaScript代码实现:

function allocateRedPacket(totalAmount, totalPeople) {
  const amounts = [];
  
  for (let i = 0; i < totalPeople - 1; i++) {
    const maxAmount = (totalAmount - (totalPeople - i - 1)) * 100;  // 把金额扩大100倍处理
    const randomAmount = Math.floor(Math.random() * maxAmount) + 1;  // 随机分配
    amounts.push(randomAmount / 100); // 把金额恢复到原来的大小
    totalAmount -= randomAmount / 100;
  }
  
  amounts.push(totalAmount); // 剩余的金额作为最后一个人的金额
  
  return amounts;
}

const totalAmount = 10;  // 总金额(单位:元)
const totalPeople = 10;  // 总人数
const result = allocateRedPacket(totalAmount, totalPeople);
console.log(result);

请注意,这种分配算法是基于随机生成金额来实现的,所以每次运行的结果都可能不同。但是,可以保证每个人至少分到1分钱,且总金额分配正确。

标签:分钱,const,红包,人分,金额,JS,totalPeople,totalAmount
From: https://www.cnblogs.com/zhangzizi/p/17753170.html

相关文章

  • 启动vue项目报错——ERROR Error loading vue.config.js: ERROR TypeError: defineCon
    问题描述在我引入echarts模块之前是ok的,引入之后就启动失败了;问题解决一般情况下,都是该项目的版本与本机cmd里面的版本不对应导致的;只需要使用这个命令npmupgrade,更新版本,一直yes下去,就能够解决这个问题啦!......
  • JS数组去重的4种办法
    有多种方法可以对数组进行去重,下面介绍的是常见的四种办法:使用Set数据结构:Set是ES6引入的一种新的数据结构,它存储唯一的值,可以利用它的去重特性来对数组进行去重。constarray=[1,2,2,3,3,4,5];constuniqueArray=[...newSet(array)];console.log(uniqueArr......
  • Grafana导入 json 文件的 dashboard 错误 Templating Failed to upgrade legacy queri
    前言编辑或者修改后的dashboard保存为json文件,在其他环境导入使用,报错FailedtoupgradelegacyqueriesDatasourcexxxxxxxwasnotfound,无法显示监控数据问题原因为:从其他grafana导出的dashboardjson文件中,数据源是写的固定的,如果当前要显示的监控数据的数据源名称......
  • 2023-01-31python-json
    +++title="Json读写(Python)"description=""date=2023-01-31T15:34:37+08:00featured=falsecomment=truetoc=truereward=truecategories=[""]tags=[""]series=[]images=[]+++使用python读写json......
  • js文件分片上传
    写在前面今天我们写一下关于js的分片上传,因为工作中很多时候上传文件是比较大的,为了不让卡死,我们可以使用分片上传的方式进行文件的传输,下面就简单的将思路梳理一下,然后贴上代码思路分析既然是分片上传,那么首先要知道不分片的时候是怎么上传的,我们一般是直接使用file文件然后将其......
  • nodejs之常用命令
    node控制台命令#新建文件夹mkdirname#清空控制台clearclr#跳转到指定目录cdname(目录名)#返回上一级cd..#移除指定文件rm文件名name#重命名renamesrc/index.htmlsrc/index.pug#清除缓存:cnpmcacheclean--forces#结束退出ctrl+c#......
  • js实现分片上传
    代码贴过来就能用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport......
  • c# json操作
    使用JavaScriptSerializer需要在引用中添加System.Web.ExtensionsusingSystem.Web.Script.Serialization;classUpdateInfo{publicstringpackageUrl;publicstringremoteManifestUrl;publicstringremoteVersionUrl;publicstringversion;pu......
  • js实现电子白板
    功能:使用画笔绘制笔迹(线条)、橡皮檫 <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>js实......
  • 原生js面试题
    一、深拷贝和浅拷贝-1js的数据类型基本类型和复杂类型-2堆和栈基本类型的值和复杂类型的地址存在栈中,复杂类型的地址指向堆中的内存-3深拷贝和浅拷贝的概念深拷贝的前提是复杂类型的复制-4举例说明 如果有个变量a和一个变量b如果a是一个对象......