红包金额随机数的生成

 <form>
红包个数:<input type="text" name="count" id="count" required style="height: 20px;"> <br>
总金额(元):<input type="text" name="amount" id="amount" required style="height: 20px;"><br>
<input type="button" id="submit" value="获取红包金额">
</form></p>

<div id=‘result‘></div>

<script src="https://www.lijinma.com/javascripts/libs/jquery.min.js"></script>
<script>

$(‘#submit‘).click(function(){
  function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
  }

  function getNextItemKey(currentKey, count) {
    if (currentKey > count) {
      throw ‘Error: currentKey > count‘;
    }
    if (currentKey != count) {
      return currentKey + 1;
    } else {
      return 1;
    }
  }

  var count = $(‘#count‘).val();
  var amount = $(‘#amount‘).val();
  if (!count) {
    alert(‘红包个数必须填写‘);
    return false;
  }
  if (!amount) {
    alert(‘总金额必须填写‘);
    return false;
  }
  if (amount / count < 0.01) {
    alert(‘单个红包金额不可低于0.01元,请重新填写金额‘);
    return false;
  }
  amount = amount * 100;
  var items = [];
  for (var i = 0; i < count; ++ i) {
    items[i] = getRandomInt(1, 100);
  }
  var itemAmounts = [];
  var sum = items.reduce(function(pv, cv) { return pv + cv; }, 0);
  var currentAmount = 0;
  for (var i = 0; i < count; ++ i) {
    if (i !== count - 1) {
      itemAmounts[i] = Math.floor(items[i] / sum * amount);
      currentAmount += itemAmounts[i];
    } else {
      itemAmounts[i] = amount - currentAmount
    }
  }

  for (var i = 0; i < count; ++ i ) {
    if (itemAmounts[i] > 0) {
      continue;
    }
    var nextKey = getNextItemKey(i, count);
    var diff = 1 - itemAmounts[i];
    itemAmounts[i] = 1;
    itemAmounts[nextKey] -= diff;
  }

  for (var i = 0; i < count; ++ i ) {
    itemAmounts[i] = itemAmounts[i] / 100;
  }

  alert(itemAmounts.join(‘元   ‘)+‘元 ‘);

});
</script>
时间: 2024-10-11 01:16:28

红包金额随机数的生成的相关文章

Linux真随机数的生成

今天看<白帽子讲WEB安全>一书,看到笔者谈到Linux如何实现真随机数生成,感觉非常有用,记录下来 #include<iostream> using namespace std; #include<unistd.h> #include<fcntl.h> #include<cmath> int main() { int randoms=open("/dev/random",O_RDONLY); int randomn; rea

java 随机数的生成

生成10个不小于100000的6位数 public static void main(String[] args) { Random random = new Random(); for (int i=0;i<10;i++) { System.out.println("第=="+i+"个邀请码"+(random.nextInt(899999)+100000)); } } 结果: 第==0个邀请码536686 第==1个邀请码161397 第==2个邀请码685

JavaScript算法题之–随机数的生成

JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2     length = 100, 3     i = 0; 4   5 for( ; i < length; i++ ){ 6     arr.push( i ); 7 } 从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复. 方法1:随机抽取法 01 var gRandomAr

浅谈随机数的生成

Part0:随机数的性质 随机数一般来说符合下面这几个性质. (马尔科夫性)\(1.\)它产生时后面那个数与前面的毫无关系. (不确定性)\(2.\)给定样本的一部分和随机算法,无法推出样本的剩余部分. (不可再现性)\(3.\)其随机样本不可重现. 另外还要说一下统计学伪随机数概念. 统计学伪随机性.统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,"10""01""00""11"四者数量大致相等

微信红包金额分配的算法 http://timyang.net/architecture/wechat-red-packet/

虽然春节已经过去一段时间,但不少微信群里面依旧乐此不疲的在玩发红包活动,用户自发的将最初的一个春节拜年的场景功能慢慢演化成一个长尾功能. 用户在微信中抢红包时分成抢包和拆包两个操作.抢包决定红包是否还有剩余金额,但如果行动不够迅速,在拆包阶段可能红包已经被其他用户抢走的情况. 红包的金额是在什么时候算? 据某架构群腾讯财付通专家反馈,红包的金额是拆的时候实时计算,而不是预先分配,实时计算基于内存,不需要额外存储空间,并且实时计算效率也很高.每次拆红包时,系统取0.01到剩余平均值*2之间作为红包

微信红包金额分配案例

<?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action { /* 微信红包的总额有100元,必须要发送给60个用户, 每个用户领取的红包是随机的,且每个用户领取的金额不得大于2元 **/ public function index(){ $total =100;//100元 $amount = 60;//60人 $baseCash = 0.1;//基础值 $arr = $this->assign_money($total,$amou

相邻不重复随机数的生成及优化

生成相邻不重复随机数是之前抽奖插件的遗留问题,在之前的文章中已经简单说过,但没有更好的解决方案.经过一个多月的修改,抽奖插件已经趋于完善,在此分享一下这个问题的解决方法.以下是最初的方法,但是会出现一个单独的全局变量,整体而言稍显多余,不算完美. // 产生相邻不重复的随机数,n 为随机数个数 var b = 0; function random(n) { var a = Math.floor(Math.random() * n); if (a == b) { return random(n);

随机数如何生成

C/C++产生随机数用到两个函数rand() 和 srand() 一. 不指定范围产生随机数 用到函数rand(),函数原型为int rand(),无参数.此时会产生一个介于0~RAND_MAX间的整数.RAND_MAX的大小可以查看,在include文件夹(linux在usr目录.windows在安装目录)的stdlib.h可以看到,linux下其值为2147483647(),其值与具体系统有关. 参考代码: #include<stdio.h> #include<stdlib.h>

随机数的生成

随机数可以用于项目中的随机生成的订单号之类,蛮实用的小功能. 如图,生成一串17位的随机数,规则是:A代表用户+4个随机数字+4个随机字母+当前年月日 var produce = function () { var array1 = "ABCDEFGHIJKMNPQRSTUVWXYZ".split (""); var array2 = "123456789".split (""); var str = "A"