bes,
Тест ( Выбрал 0 минимум и более 4 частей - для максимального разброса
<div id="div">
<input value="999"> Число <br>
<input value="9"> Количество частей <br>
<input value="0"> Минимальное значение части<br>
<input type="button" value="Разбить">
</div>
<script>
window.onload = function () {
function f(num, part, min) {
if (num / part < min) {
alert('не реально');
return;
}
var rest = num - min * part;
var mas = [];
var elem = 0;
for (var i = 1; i < part; i++) {
elem = Math.round(rest * Math.random());
mas.push(min + elem);
rest -= elem;
}
mas.push(min + rest);
return mas;
}
function check (elem) {
if (isNaN(elem) == false && elem.value != '') {
return true;
} else {
return false;
}
}
var div = document.getElementById('div');
div.children[6].onclick = function () {
var num = parseInt(div.children[0].value);
var part = parseInt(div.children[2].value);
var min = parseInt(div.children[4].value);
if (check(num) && check(part) && check(min)) {
var arr = [];
for(var j=0; j<part;j++){
arr[j]=0;
}
var Ntest=300000;
for(var i=0; i<Ntest; i++){
var a = f (num, part, min); //alert(a)
for(var j=0; j<part; j++){ arr[j]+=a[j];if(i!=0)arr[j]=arr[j]/2}
}
alert (arr.join('\n'))
} else {
alert('в полях есть не число')
}
}
}
</script>
Мну тест:
<style type="text/css">input{margin:4px;}</style>
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<input id=Number type="text" value="999" > Число <br />
<input id=Nparts type="text" value="9" > Кол-во разбиваемых частей<br />
<input id="Min-a" type="text" value="0" > Минимальное значение каждой части<br />
<input id="Rasbitt" type="button" value="Разбить">
<script type="text/javascript">
$(document).ready(function(){
function f (a, N, b) {
var Arr = [];
var Summ = 0;
for(var i=0; i<N; i++){
Arr[i] = Math.random();
Summ+=Arr[i];
}
var DELTA_FromParts = (a - b*N);
var Ost = a;
for(var i=0; i<N-1; i++){
Arr[i] = b + parseInt((DELTA_FromParts*Arr[i])/Summ)
Ost-= Arr[i];
} Arr[N-1] = Ost;
//alert(Arr);
return Arr;
}
$('#Rasbitt').click(function(e) {
var a = parseInt($('#Number').val());
var b = parseInt($('#Min-a').val());
var N = parseInt($('#Nparts').val());
var arr2 = [];
for(var j=0; j<N;j++){
arr2[j]=0
}
var Ntest=300000;
for(var i=0; i<Ntest; i++){
var aa = f (a, N, b); //alert(aa)
for(var j=0; j<N; j++){ arr2[j]+=aa[j];if(i!=0) arr2[j]=arr2[j]/2}
}
alert (arr2.join('\n'))
});
});
</script>