开年过来东莞,在回家路上在长沙Net社区群里看到有朋友提了一个发红包的问题,很多地方都有类型需求。整理了一下。开盒即用
总金额为100 最大金额10 最小金额2 要求随机生成15个数 这15个数的总和为100
看到钱 来了兴趣了解了一下,大概需求是:100元 ,15个人分,金额大小在2~10之间。
整理思路:
1:随机数 范围有限制。
2: 随机15次 给10个分钱,这个时候可能分的钱大于100 或者小于100。
3:在减钱 或者加钱处理。
code如下:
1 <script> 2 /* 金额,最大金额,最小金额,人数 */ 3 let money = 100, 4 maxRanDomNum = 15, 5 mixRandomNum = 2, 6 people = 15; 7 /* 最终分到的钱 */ 8 let arrMonery = []; 9 10 /* 第一步:给15个人分钱 在最小,最大范围内,不管分多还是少 */ 11 for (let index = 0; index < people; index++) { 12 const value = randomNum(mixRandomNum, maxRanDomNum); 13 arrMonery.push(value); 14 } 15 16 /* 第2步: 分的钱多还是少 ,如果是0 ,刚好分到100元 */ 17 let sumMoney = ArrTotal(arrMonery) - money; 18 /* 钱大于100 */ 19 if (sumMoney > 0) { 20 for (let index = 0; index < sumMoney; index++) { 21 const num = parseInt(Math.random() * people); 22 //某一个人分到的钱小于mixRandomNum,停止减钱 但是sumMoney要加1 23 if (arrMonery[num] == mixRandomNum) { 24 sumMoney = sumMoney + 1; 25 continue; 26 } 27 arrMonery[num]--; 28 } 29 } 30 /* 钱 小于100 */ 31 else if (sumMoney < 0) { 32 for (let index = 0; index < sumMoney; index++) { 33 const num = parseInt(Math.random() * people); 34 //某一个人分到的钱是15元,停止加钱 但是sumMoney要加1 35 if (arrMonery[num] == maxRanDomNum) { 36 sumMoney = sumMoney + 1; 37 continue; 38 } 39 arrMonery[num]++; 40 } 41 } 42 /* 打印钱的总和 */ 43 console.log("打印钱的总和 " + ArrTotal(arrMonery)); 44 45 /* 打印所有分到的钱 */ 46 console.log(arrMonery); 47 48 /* 数组之和 */ 49 function ArrTotal(arr) { 50 if (!arr instanceof Array) { 51 console.error("参数错误,请传入数组"); 52 return; 53 } 54 if (arr.length == 0) { 55 console.error("数组长度是0"); 56 return 0; 57 } 58 return eval(arr.join("+")); 59 } 60 61 //生成从minNum到maxNum的随机数 62 function randomNum(minNum, maxNum) { 63 switch (arguments.length) { 64 case 1: 65 return parseInt(Math.random() * minNum + 1, 10); 66 break; 67 case 2: 68 return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10); 69 break; 70 default: 71 return 0; 72 break; 73 } 74 } 75 </script>
开盒即用。
缺点:分到15元几率非常小
资料参考:
随机数:https://www.cnblogs.com/starof/p/4988516.html
需求2:10个人随机分100元
var arr = new Array(10).fill(0) for(var i=0;i<100;i++){ var num = parseInt(Math.random()*10) arr[num] ++ } console.log(arr)