js计算--生成几个随机自然数

总监给我一个需求文档,如下:

  1. 3000以下生成一个,3000至5999生成二个,6000至8999生成三个,类推。
  2. 生成2个以上含2个,每个都要随机自然数,但不超过总数
  3. 生成随机数后可以手动修改,要计算差数

根据输入的数字生成几个

3000以下生成一个,3000~5999生成二个,6000~8999生成三个,类推

代码如下:

var enterNumber = "" //输入数字的值
var sum = (enterNumber / 1000) / 3 + 1; // 1是因为生成的个数至少1
var num = parseInt(sum); // 去除小数,变成自然数,最终生成的个数

// enterNumber = 2500; sum = 1.8333333333333335; num = 1
// enterNumber = 3000; sum = 2; num = 2
// enterNumber = 5500; sum = 2.833333333333333; num = 2
// enterNumber = 9999; sum = 4.333; num = 4

生成随机自然数

生成2个以上含2个,每个都要随机自然数,但不超过总数

代码如下:

var max = enterNumber / num; // 拿平均数作为最大值
var min = max / 1.2; // 最大值除以1.2作为最小值
var aryRet = []; 
var iAcc = 0;
for(var i = 0; i < (num - 1); i++){ // num - 1 生成的个数减1
    var iTmp = Math.floor(Math.random() * (max-min+1)+min); // 生成随机自然数
    aryRet.push(iTmp);
    iAcc += iTmp // num-1的个数生成后的随机自然数总数
}
// enterNumber减上面总数剩余给num的最后一个赋值
aryRet.push(enterNumber-iAcc)

// enterNumber=3000; 生成aryRet: [1451, 1549]
// enterNumber=6000; 生成aryRet: [1874, 1922, 2204]

计算差数

修改事件里面,如下:

var difference = 0 //差数
var numSum = 0
for(var i = 0; i < aryRet.length; i++){
    numSum += parseFloat(aryRet[i])
}
difference = parseFloat(enterNumber) - numSum // 输入的数字减去生成的数字

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值