昨天把需求肝完了,今天接着摸鱼,写个红包算法玩玩
红包算法:顾名思义就是像发红包一样。给定金额和红包个数,生成给定个数的浮点型数值,并且加起来要等于给定金额(不能多也不能少)
不多比比上代码:
public static float[] hb(int money, int count,int accuracy){
if(money==0||count==0){
return null;
}
float sum=0;
//用于获取随机数,公不公平就看他了
Random ra =new Random();
//用来存储每个红包的金额,根据给定参数确认长度
float[] arr=new float[count];
//确定金额的精度,比如你金额是10快,精度是0.01,就把十块分成1000份,方便后面操作
int x= (int) (money*Math.pow(10,accuracy));
//前面分了多少分这里就循环多少次
for (int i = 0; i <x; i++) {
//每次把金额加在数组中随机下标对应的元素中
arr[ra.nextInt(count)]+=1;
}
//遍历数组,恢复金额,不加这一步会造成精度丢失,所有红包金额加起来与给定金额不相等
for (int i = 0; i < arr.length; i++) {
arr[i]= (float) (arr[i]/Math.pow(10,accuracy));
sum=sum+arr[i];
}
if(sum>money){
float v = sum - money;
arr[0]+=v;
}
if(sum<money) {
float v = money - sum ;
arr[0]-=v;
}
//返回
return arr;
}
测试一下:
每一步都写在注解里了,有条件的复制到idea里跑一下,球球了。