实现一个拼手气抢红包算法

65daaf38c3665d2e738ac3b6fa74c398.png

实现一个拼手气抢红包的算法。

function getRandomAmount(totalAmount, totalPeople) {
  // 随机生成一个指定范围内的金额
  const min = 0.01;  // 每个人至少能抢到 0.01 元
  const max = totalAmount / totalPeople * 2;  // 每个人最多能抢到总金额的两倍
  const random = Math.random() * (max - min) + min;
  return Math.floor(random * 100) / 100;  // 保留两位小数
}


function divideRedPacket(totalAmount, totalPeople) {
  const result = [];
  let remainingAmount = totalAmount;
  let remainingPeople = totalPeople;


  for (let i = 0; i < totalPeople - 1; i++) {
    const amount = getRandomAmount(remainingAmount, remainingPeople);
    result.push(amount);
    remainingAmount -= amount;
    remainingPeople--;
  }


  result.push(remainingAmount);
  return result;
}


// 示例用法
const totalAmount = 100;  // 红包总金额
const totalPeople = 10;  // 总人数


const redPacket = divideRedPacket(totalAmount, totalPeople);
console.log(redPacket);

上面的代码中,getRandomAmount() 函数用于生成一个指定范围内的随机金额,确保每个人能够抢到一定的金额,同时保证总金额不超过红包总金额的两倍。

divideRedPacket() 函数用于将红包金额拆分给指定的人数。它使用一个循环来生成每个人的随机金额,并将金额存入结果数组中。最后一个人获取剩余的金额。

这个拼手气抢红包算法的设计思路如下:

1.确定红包总金额和总人数。2.定义一个函数 getRandomAmount(totalAmount, totalPeople),用于生成一个指定范围内的随机金额。在这个函数中,我们设置了每个人至少能抢到 0.01 元(min = 0.01),并且每个人最多能抢到总金额的两倍(max = totalAmount / totalPeople * 2)。然后,我们使用 Math.random() 生成一个 0 到 1 之间的随机数,将其乘以金额范围的大小,再加上最小金额,得到一个随机金额。最后,我们使用 Math.floor() 和乘除操作来保留两位小数。3.定义一个函数 divideRedPacket(totalAmount, totalPeople),用于将红包金额拆分给指定的人数。在这个函数中,我们创建一个空数组 result 来存储每个人抢到的金额。同时,我们定义两个变量 remainingAmount 和 remainingPeople,分别表示剩余的金额和剩余的人数,初始值分别为总金额和总人数。4.使用一个循环,从第一个人到倒数第二个人,每次迭代生成一个随机金额,并将其存入结果数组 result 中。在每次迭代中,我们调用 getRandomAmount() 函数来生成随机金额,并将其添加到结果数组中。然后,我们更新剩余金额和剩余人数的值。5.最后一个人获取剩余的金额,将其添加到结果数组中。6.返回结果数组,即每个人抢到的金额。

这个算法保证了每个人至少能抢到 0.01 元,并且总金额不超过红包总金额的两倍。通过随机生成每个人的金额,实现了拼手气的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值