Avatar billede oyderke Nybegynder
13. november 2003 - 11:57 Der 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.

Hvordan gør jeg det?

Mvh
oyderke
Avatar billede oyderke Nybegynder
13. november 2003 - 11:58 #1
at = et
tastefejl
Avatar billede barklund Nybegynder
13. november 2003 - 12:02 #2
beats me... Det 9. tal kan jo ikke være random :)

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?
Avatar billede oyderke Nybegynder
13. november 2003 - 12:07 #3
jeg forestiller mig at de random tal er mellem 0 og 10.
Det gør ikke noget at det 9. tal ikke er random.
Avatar billede barklund Nybegynder
13. november 2003 - 12:11 #4
Hvilken distribution? Normal distribuere over skal vi sige 4 med spredning på 4? Må nogle af dem være 0?
Avatar billede oyderke Nybegynder
13. november 2003 - 12:12 #5
jeg ved ikke hvad du mener med distribution?
Nogle af dem må godt være 0, men ikke hver gang.
Avatar billede oyderke Nybegynder
13. november 2003 - 12:36 #6
jeg løste det med denne kode:

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))

    trace(Number1)
    trace(Number2)
    trace(Number3)
    trace(Number4)
    trace(Number5)
    trace(Number6)
    trace(Number7)
    trace(Number8)
    trace(Number9)
    trace("---")

    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
    trace("Sum: " + NumberSum)
    if (NumberSum == 39) {
        UseSum()
    } else {
        AdjustSum()
    }
}

function AdjustSum() {
    trace("Adjusting sum")
   
    if (NumberSum < 39) {Number1 = math.abs(Number1 + 1)}
    if (NumberSum > 39) {Number1 = math.abs(Number1 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number2 = math.abs(Number2 + 1)}
    if (NumberSum > 39) {Number2 = math.abs(Number2 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number3 = math.abs(Number3 + 1)}
    if (NumberSum > 39) {Number3 = math.abs(Number3 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number4 = math.abs(Number4 + 1)}
    if (NumberSum > 39) {Number4 = math.abs(Number4 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number5 = math.abs(Number5 + 1)}
    if (NumberSum > 39) {Number5 = math.abs(Number5 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number6 = math.abs(Number6 + 1)}
    if (NumberSum > 39) {Number6 = math.abs(Number6 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number7 = math.abs(Number7 + 1)}
    if (NumberSum > 39) {Number7 = math.abs(Number7 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number8 = math.abs(Number8 + 1)}
    if (NumberSum > 39) {Number8 = math.abs(Number8 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number9 = math.abs(Number9 + 1)}
    if (NumberSum > 39) {Number9 = math.abs(Number9 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum == 39) {
        trace("Sum: " + NumberSum)
        UseSum()
    }
}

function UseSum() {
    trace("---")
    trace(Number1)
    trace(Number2)
    trace(Number3)
    trace(Number4)
    trace(Number5)
    trace(Number6)
    trace(Number7)
    trace(Number8)
    trace(Number9)
}






knap1.onPress = function() {
    GenerateSum()   
}
Avatar billede oyderke Nybegynder
13. november 2003 - 12:40 #7
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))

    trace(Number1)
    trace(Number2)
    trace(Number3)
    trace(Number4)
    trace(Number5)
    trace(Number6)
    trace(Number7)
    trace(Number8)
    trace(Number9)
    trace("---")

    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
    trace("Sum: " + NumberSum)
    if (NumberSum == 39) {
        UseSum()
    } else {
        AdjustSum()
    }
}

function AdjustSum() {
    trace("Adjusting sum")
   
    if (NumberSum < 39) {Number1 = math.abs(Number1 + 1)}
    if (NumberSum > 39) {Number1 = math.abs(Number1 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number2 = math.abs(Number2 + 1)}
    if (NumberSum > 39) {Number2 = math.abs(Number2 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number3 = math.abs(Number3 + 1)}
    if (NumberSum > 39) {Number3 = math.abs(Number3 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number4 = math.abs(Number4 + 1)}
    if (NumberSum > 39) {Number4 = math.abs(Number4 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number5 = math.abs(Number5 + 1)}
    if (NumberSum > 39) {Number5 = math.abs(Number5 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number6 = math.abs(Number6 + 1)}
    if (NumberSum > 39) {Number6 = math.abs(Number6 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number7 = math.abs(Number7 + 1)}
    if (NumberSum > 39) {Number7 = math.abs(Number7 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number8 = math.abs(Number8 + 1)}
    if (NumberSum > 39) {Number8 = math.abs(Number8 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum < 39) {Number9 = math.abs(Number9 + 1)}
    if (NumberSum > 39) {Number9 = math.abs(Number9 - 1)}
    NumberSum = math.abs(Number1 + Number2 + Number3 + Number4 + Number5 + Number6 + Number7 + Number8 + Number9)
   
    if (NumberSum == 39) {
        trace("Sum: " + NumberSum)
        UseSum()
    } else {
        AdjustSum()
    }
}

function UseSum() {
    trace("---")
    trace(Number1)
    trace(Number2)
    trace(Number3)
    trace(Number4)
    trace(Number5)
    trace(Number6)
    trace(Number7)
    trace(Number8)
    trace(Number9)
}






knap1.onPress = function() {
    GenerateSum()   
}
Avatar billede barklund Nybegynder
13. november 2003 - 12:45 #8
Det er måske ikke så hensigtsmæssigt :/

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 :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB