Сообщение от Dim@
|
всё ещё все думают по разному и у всех все разное Quo ire sunt?
|
И это очень хорошо. Чем больше возникает вариантов, тем шире поле для взаимодополнений и тем вероятнее, что в итоге образуется наилучшее решение.
Сообщение от oneguy
|
SplitNum(1, 3, 0) выдаёт [0, 1, 0] в 2 раза чаще, чем каждую из остальных 2 возможностей.
|
function SplitNum (sum, summands, min) {
if (summands < 1 || summands * min > sum) { return []; }
var i, range = sum - summands * min, points = [], result = [];
for (i=0; i<summands-1; i++) { points[i] = Math.floor(Math.random() * (range + 1)); }
points.push(0, range);
points.sort(function (a, b) { return a - b; });
for (i=0; i<summands; i++) { result[i] = points[i+1] - points[i] + min; }
return result;
}
var counter = [0, 0, 0];
for (var i=0; i<10000; i++) {
counter[SplitNum(1, 3, 0).indexOf(1)]++;
}
alert(counter);
OH, SHI~