一提到红包,就不得不想到微信,没错,这是一道腾讯面试压轴题。 以下就是分析。
前言
每逢春节,家庭群的长辈们都会发红包,有的时候我们都会因为红包最少而气愤言:为什么我的手气那么差!!!其实这不是手气的问题,而是算法的原因。下面就从JavaScript算法来解析为什么手气不好。
拼手气红包的原理
1.随机
2.有金额差,但是不是很大
3.发给多少人,每个人抢到的金额加起来等于总金额
现在开始一步步用代码表示
随机函数,使用JavaScript中自带的Math Math.random(),可以输出0~1中的随机数
//输入//***/来解释代码,严谨性拉满
/**
* @func 红包算法
* @param {number} total 总金额
* @param {number} num 人数
*/
//定义红包函数
function hongbao(total,num){
const arr=[];
let allMoney = total;
let allNum = num;
}
计算有多少份红包,并且加起来等于总金
额
用浮点型来规范输出的值保留两位小数
for(let i=0;i<num-1;i++){
let money = parseFloat(Math.random() * (allMoney/allNum)).toFixed(2)
allMoney = allMoney-money //每次总金额减少
allNum--;//减少一份
arr.push(money)
//保留最后一个人
}
保存最后一个人的值
按顺序返回每一个红包的钱
arr.push(allMoney.toFixed(2));
return arr;
由代码可以看出来,每一个红包在发的时候就被算法定死了,意思就是,红包会根据已经提前算好的数量,按数组的排序发给抢的顺序。
结语
学会理解,才有收获,题目本不难,难的是怎么去分析和理解,希望各位能够点点赞,给奶茶一点点智齿。