4 个回答

10人分5组。
组内满足 单人不超过6, 和等于 8

while(true){
  var per1 = 6*Math.random();
  var per2 = 6*Math.random();
  var per3 = 6*Math.random();
  var per4 = 6*Math.random();
  var per5 = 6*Math.random();
  var per6 = 6*Math.random();
  var per7 = 6*Math.random();
  var per8 = 6*Math.random();
  var per9 = 6*Math.random();
  var per10 = 6*Math.random();
  var total = per1+per2+per3+per4+per5+per6+per7+per8+per9+per10;
  if(total==40&&0<per1<6&&0<per2<6&&0<per3<6&&0<per4<6&&0<per5<6&&0<per6<6&&0<per7<6&&0<per8<6&&0<per9<6&&0<per10<6){
    console.log(per1);
    console.log(per2);
    console.log(per3);
    console.log(per4);
    console.log(per5);
    console.log(per6);
    console.log(per7);
    console.log(per8);
    console.log(per9);
    console.log(per10);
    break;
  }
};

这样可行?
百度到的一个红包算法
//红包算法

var num = 10;
var val = 500000;

for(var i = 1;i<=num;i++){
if(i == num){
console.log(val);
    }
else{
var max = Math.floor( val / 2);
var rnd = $.roll(1,max);
val -= rnd;
console.log(rnd);
    }

}
Divide(10,40,6);
 
function Divide(p,m,a){
    /*传入人数,总金额,单人上限*/
    var arr=[];
    nm=m*100;
    na=a*100;
    /*乘100,便于运算*/
    l=p;
    /*每次遍历后剩余人数*/
    for(i=0;i<p-1;i++){
        l--;
        arr[i]=roll(nm,l);
        /*传入剩余金额及人数*/
        nm-=arr[i];
        /*剩余金额*/
    }
    arr[p-1]=nm;
    /*最后一个人不用分*/
    if(arr[p-1]>na){
        return Divide(p,m,a);
    }
    /*最后一个人如超过上限,重新分*/
    return arr.map(function(v,i,arr){
        return v=v/100;
    });
    /*分好了,每个数重新除以100,输出结果*/
 
    /*定义随机函数,传入剩余金钱和人数*/
    function roll(o,l){
        var b=o-l;
        /*每个人至少分1分钱*/
        var Max=Math.min(na,b);
        return Math.ceil(Math.random()*Max);
    }
}

这个方案测试了能用

这是数学修养 不是编程思维的问题

推荐问题
宣传栏