13. november 2003 - 11:57Der er
7 kommentarer og 1 løsning
random tal med sum 39
Hej
Jeg har brug for en funktion som genererer 9 forskellige variabler, med en sum på ialt 39. Der skal komme et forskelligt output hver gang man kører funktionen, men det er vigtigt at der er 9 variabler med at random tal. Og de 9 tals sum er præcis 39.
Men for lige at slå en ting på plads, så er random ikke en egenskab, som man kan afgøre om et tal har. Derimod kan man afgøre om kilden til tallet er en random-generator.
Og derfor er det 9. tal jo aldrig random. Jeg kan ikke lige gennemskue hvordan, men fortæl os eventuelt hvilken distribution af tal du ønsker dig. For de skal vel ikke være ligeligt distribuerede?
function GenerateSum() { Number1 = new Number(Random(10)) Number2 = new Number(Random(10)) Number3 = new Number(Random(10)) Number4 = new Number(Random(10)) Number5 = new Number(Random(10)) Number6 = new Number(Random(10)) Number7 = new Number(Random(10)) Number8 = new Number(Random(10)) Number9 = new Number(Random(10))
den forrige kode virker ikke hvis tallet i første omgang er over 48. Men det gør denne:
function GenerateSum() { Number1 = new Number(Random(10)) Number2 = new Number(Random(10)) Number3 = new Number(Random(10)) Number4 = new Number(Random(10)) Number5 = new Number(Random(10)) Number6 = new Number(Random(10)) Number7 = new Number(Random(10)) Number8 = new Number(Random(10)) Number9 = new Number(Random(10))
function generate() { var len = 9; var sum = 39; var max = 10; var min = 0; var i, m, r; var ret = new Array(); for (i = 0; i < len-1; i++) { m = Math.max(sum-1, max); r = Math.round(min+Math.random()*(max-min)); ret[i] = r; sum -= r; } ret[len-1] = sum; ret.sort(function() {return random(3)-1;}); return ret; } trace(generate());
Er lidt nemmere :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.