28. januar 2003 - 12:39Der er
62 kommentarer og 2 løsninger
Tilfældig udvælgelse af tal ud fra et andet tal
Hvordan kan man teoretisk lave en procedure der udvælger et tilfældigt tal mellem f.eks. 100.000 og 150.000 baseret på et tal mellem 1 og 99
Jeg havde tænkt på noget i stil med: Men kan ikke finde ud af beregningsdelen. OBS: jeg er bare intereseret i teorien om hvordan man matematisk udregner et sådant tal. Pseudokode er fint nok, da sproget ikke er udvalgt endnu.
Inputs: Antallet af lodsedler = (et tal større end 100.000) Bestemt_af_vinder = (et tal mellem 1 og 99)
Men kan ikke finde ud af beregningsdelen. OBS: jeg er bare intereseret i teorien om hvordan man matematisk udregner et sådant tal. Pseudokode er fint nok, da sproget ikke er udvalgt endnu.
Arne> Jeg skal bruge en funktion der ud fra et user-input(1-99) tilfældigt kan generere et heltal mellem f.eks. 100.000 og 150.000 Men det er måske svært idet tallet 1-99 så skal ku dække over 50.000 tal. Bedre er det måske hvis det blot skal være et tilfældigt tal mellem 100.000 og f.eks. 150.000
Hvis du vil kunne genskabe tallene så kan du bruge: rng = new Random(Integer.parseInt(args[0])); som jeg skrev. Hvis du vil have dem mere ægte randomiseret, så kan du vælge: rng = new Random(System.currentTimeMillis() + Integer.parseInt(args[0]));
Arne> Jeg mener præcis et tal mellem 1...99 som seed Startværdien vil altid være 100.000 Slutværdien kan variere og er altså en variabel som skal ændres fra gang til gang. Nu har jeg ikke selv meget forstand på Java, men hvis den eks. skulle generere 50 tilfældige tal, så kan man vel godt få dem udskrevet på skærmen ik?
Man forestiller sig at en masse personer har købt nogle lodsedler. f.eks. 50.000 lodsedler. Af de lodsedler skal der udtrækkes en vindergruppe på f.eks. 50 personer. Udtrækningen skal så foregå ved at en person indtaster sit lykkenr.(mellem 1 og 99) og på baggrund af dette og antallet af lodsedler mellem udvælges tilfældigt en talrække på 50 forskellige numre
public class SpecialRandom { private final static int D = 50000; private static Random rng; public static void main(String[] args) { int seed = Integer.parseInt(args[0]); if ((seed >= 1) && (seed <= 99)) { rng = new Random(seed); for (int i = 0; i < 50; i++) { System.out.println(aRandom()); } } else { System.out.println("Error in seed"); } } private static int aRandom() { return 100000 + rng.nextInt(D + 1); } }
vil verifcere at seed er 1..99 og generere 50 tilfældige tal 100000..100000+D !
public class SpecialRandom { private final static int D = 50000; private static Random rng; public static void main(String[] args) { int seed = Integer.parseInt(args[0]); if ((seed >= 1) && (seed <= 99)) { rng = new Random(System.currentTimeMillis() + seed); for (int i = 0; i < 50; i++) { System.out.println(aRandom()); } } else { System.out.println("Error in seed"); } } private static int aRandom() { return 100000 + rng.nextInt(D + 1); } }
generere forskellige tal udfra samme seed, da tiden også indgår i seed.
arne v> >Og det er indlysende at løsningerne med et tilfældigt tal 1..99 >der transformeres til 100000..150000 er helt utilstrækkelige >i denne sammenhæng.
Skal det forstås som at du ikke mener tallet vil blive tilfældigt nok eller at din eller arnvigs løsning ikke er anvendelig i denne situation ?
Det betyder at min 13:18:11 løsning og Arnvigs 13:26:23 løsning (og alle tidligere) ikke kan bruges, fordi de genererer et tilfældigt tal 1..99 og transformerer fuldstændigt entydigt op til 100000..150000.
Mine senere forslag som: initaliserer random generatoren med et bruger input 1..99 genererer et eller flere tilfældig tal 100000..150000 med den generator burde være OK.
Daniel_d: Det her er ikke en konkurrence, hvor nogen kan løbe af med sejren. Det er et forum hvor man kan søge hjælp på diverse spørgsmål. Hvis du opfatter det som en konkurrence eller et spil, skal du nok ikke regne med at ret mange gider hjælpe dig i længden. Det er godt etikette at dele point mellem bidragsyderne, naturligvis efter fortjeneste. Læg desuden mærke til at det er vigtigt hvordan et spørgsmål bliver formuleret og at du beskriver hvad du vil opnå.
arnvig> Du må undskyld hvis jeg har formuleret det som værende en konkurrence. Det var ikke meningen. Det jeg mente var at Arne Vs bidrag var det som løste mit problem.
Jeg er godt klar over, og betragter på ingen måde, eksperten som værende en konkurrence eller et spil. Jeg er utrolig glad for Eksperten og taknemmelig ud over det sædvanelige for al den hjælp jeg har fået her igennen tiden.
Jeg er ligeledes klar over hvor vigtigt det er at formulere et spørgsmål korrekt, hvilket jeg måske ikke har været god nok til i denne situation.
Hvad angår point er jeg heller ikke uenig med dig. Da jeg skrev at Arne løb af med sejren mente jeg at han naturligvis skulle have flest point. Dermed siger jeg ikke at du ikke har hjulpet mig, for det har du jo. Jeg værdsætter meget at du har taget tid til at hjælpe mig, selvom det ikke var dit svar det løste mit problem.
Tit har jeg givet folk point selvom jeg har løst mit problem selv, netop fordi de har taget sig tid til at prøve at hjælpe mig. Så jeg er ked af hvis det jeg skrev blev fejlfortolket.
har lavet det om til en Integer hvor det virker delvist forstået på den måde at den udskriver et tilfældigt tal i min Memo, men bedre var det hvis der blev udskrevet 50 tal i min Memo og at tilfældigheden også blev baseret på tiden...
Jeg prøver at smide det i en .zip og lægger det på nettet senere. Så kan du evt bedre se hvor jeg ønsker at komme hen
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.