![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 02:40
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Maxmaxmахimus,
Та вообще зависимость факториальная - но имхо нун рыть в сторону рядов - что-то мне напоминает
Ко всему прочему - мон найти вариации делителей всех чисел до 100, этого должно хватать для боль мень равномерной статистики и оценки при непопадании на простые числа(ну и их комбинации
Последний раз редактировалось Deff, 30.07.2012 в 02:45.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 12:04
|
![Аватар для bes](https://javascript.ru/forum/image.php?u=19820&dateline=1334914235) |
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Прошу прошения, если данный варинат уже был, распределяю добавки к минимальному значению.
Последнее число, в принципе, и не может быть случайным по самой формулировке задачи (оно закономерно является разницей расчленяемого числа и суммы предыдущих полученных чисел).
<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);
alert(mas);
}
f(130, 3, 20)
}
</script>
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 12:14
|
![Аватар для Aetae](https://javascript.ru/forum/image.php?u=4993&dateline=1299014303) |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Есть мысля рекурсивно дробить число на две рандомные половики пока не получится нужное количество частей, но тестить сейчас лень.)
__________________
29375, 35
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 12:36
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
bes,
Вроде родил идентичное Вашему:
<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="100" > Число <br />
<input id=Nparts type="text" value="4" > Кол-во разбиваемых частей<br />
<input id="Min-a" type="text" value="1" > Минимальное значение каждой части<br />
<input id="Out-2" type="text" size="35" value=""> Выходной массив разбивки <br />
<input type="button" value="Разбить" onClick="TstNum()">
<script type="text/javascript">
function TstNum(){
var a = parseInt($('#Number').val());
var b = parseInt($('#Min-a').val());
var N = parseInt($('#Nparts').val()); //alert(a+'||'+b+'||'+N)
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);
b=Arr.join();c=eval(Arr.join('+'));
$("#Out-2").val(b+'='+c);
}
</script>
Последний раз редактировалось Deff, 30.07.2012 в 18:18.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 17:47
|
![Аватар для bes](https://javascript.ru/forum/image.php?u=19820&dateline=1334914235) |
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
<div id="div">
<input value="130"> Число <br>
<input value="3"> Количество частей <br>
<input value="20"> Минимальное значение части<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);
alert(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)) {
f (num, part, min);
} else {
alert('в полях есть не число')
}
}
}
</script>
PS: добавил поля для ввода
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 17:59
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Увидел разницу
bes, берёт рандом от остатка за вычетом предыдущего рандома, - что не айс - поскольку увеличивает вероятность больших размеров для первых элементов деления и уменьшает для конечных.
я же беру рандом для всех частей, с последующим нормированием каждого на общую сумму рандомов - что обеспечивает независимость каждой части
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 18:07
|
![Аватар для bes](https://javascript.ru/forum/image.php?u=19820&dateline=1334914235) |
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Deff, у меня распределение настолько случайно, насколько случайна сама Math.random() ![](https://javascript.ru/forum/images/smilies/smile.gif) (+ только в том, что это делается за part (количество частей) шагов без лишних проверок)
Сообщение от Deff
|
bes, берёт рандом от остатка за вычетом предыдущего рандома, - что не айс - поскольку увеличивает вероятность больших размеров для первых элементов деления и уменьшает для конечных.
|
Если потестить, то с этим всё вроде нормально
Последний раз редактировалось bes, 30.07.2012 в 18:10.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 18:20
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от bes
|
Если потестить, то с этим всё вроде нормально
|
bes,
Оки - вызови функцию 100 раз и запиши среднее арифметическое
для 1-й;2-й; и 3-й доли - они будут убывать!
Параметры разделения и начальных условий - не меняем
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 18:31
|
![Аватар для bes](https://javascript.ru/forum/image.php?u=19820&dateline=1334914235) |
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Deff, 100 раз не тестил (не до этого ![](https://javascript.ru/forum/images/smilies/smile.gif) ), если не нормально, ок, верю, оставляю только первую фразу
Сообщение от bes
|
у меня распределение настолько случайно, насколько случайна сама Math.random()
|
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
30.07.2012, 18:45
|
![Аватар для Hekumok](https://javascript.ru/forum/image.php?u=21338&dateline=1344715033) |
✔
|
|
Регистрация: 04.06.2012
Сообщений: 513
|
|
Сообщение от Deff
|
bes,
Оки - вызови функцию 100 раз и запиши среднее арифметическое для 1-й;2-й; и 3-й доли - они будут убывать!
Параметры разделения и начальных условий - не меняем
|
Да, чаще всего самая большая - это первая доля! Намного чаще остальных!
|
|
|
|