Показать сообщение отдельно
  #51 (permalink)  
Старый 30.07.2012, 19:32
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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" >&nbsp;  Минимальное значение каждой части<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>

Последний раз редактировалось Deff, 31.07.2012 в 10:36.
Ответить с цитированием