Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   programmatje gezocht (https://forum.scholieren.com/showthread.php?t=754059)

phmpruim 20-02-2004 12:16

programmatje gezocht
 
ik zoek een programma die 16 letters in alle mogelijke volgordes zet

Dr HenDre 20-02-2004 12:29

dan heb je 16! mogelijkheden. Je kan het zelf maken (y) Niet al te moeilijk lijkt me

edit:
om je een indruk te geven hoeveel mogelijkheden dat zijn:
16! = 2,1×10^13

phmpruim 20-02-2004 12:35

ok, als het zo makkelijk is, kun je het dan voor me schrijven? ik kan niet (nauwelijks) programmeren

edit: ik weet ook wel dat het veel zijn, anders zou ik het toch met de hand doen

Dr HenDre 20-02-2004 12:41

Citaat:

phmpruim schreef op 20-02-2004 @ 13:35:
ok, als het zo makkelijk is, kun je het dan voor me schrijven? ik kan niet (nauwelijks) programmeren

edit: ik weet ook wel dat het veel zijn, anders zou ik het toch met de hand doen

je hebt geluk ik heb vakantie :p k zal me er eens over buigen. Moeten het 16 willekeurige letters zijn of staat die van tevoren vast?

voeg me trouwens effe toe op msn, praat iets makkelijker (y)

how mn adres is dus drhendre@hotmail.com

Dr HenDre 20-02-2004 13:13

pff het valt toch best wel tegen (n) :p Als ik iets heb laat ik het wel horen

Kawoutertje 20-02-2004 13:45

Ik zou op het eerste zicht zeggen:

Je zet alle letters van het alfabet in een array.

je zoekt met een randomfunctie (genereert in de meeste gevallen een willekeurig getal tussen 0 en 1) een getal en je vermenigvuldigt dit met 26 (aantal letters van het alfabet), en je past daar een floor() op toe zodat het bekomen getal naar beneden op een integer(geheel getal) afgerond wordt.
En dan neem je de letter die overeenkomt met dit getal in die eerste array. En dat doe je 16 keer.

Simpel toch, niet ?

edit: en als je elke letter maar éénmaal mag gebruiken, dan sla je de reeds gebruikte letters of hun overeenkomstige cijfer (vd array) ergens in een array op of zo, en wanneer deze opnieuw genomen wordt, negeer je dat en zoek je opnieuw, zonder dat je het "aantal keer gevonden" verhoogt.

phmpruim 20-02-2004 13:55

volgens mij begrijp je het verkeerd (of ik begrijp jou niet, kan ook)

het is de bedoeling dat als je 16 letters invoert, het programma alle mogelijke volgordes als uitvoer geeft.

phmpruim 20-02-2004 13:55

Citaat:

Dr HenDre schreef op 20-02-2004 @ 13:41:
voeg me trouwens effe toe op msn, praat iets makkelijker (y)

how mn adres is dus drhendre@hotmail.com

gedaan

Dr HenDre 20-02-2004 15:35

Citaat:

Kawoutertje schreef op 20-02-2004 @ 14:45:
Ik zou op het eerste zicht zeggen:

Je zet alle letters van het alfabet in een array.

je zoekt met een randomfunctie (genereert in de meeste gevallen een willekeurig getal tussen 0 en 1) een getal en je vermenigvuldigt dit met 26 (aantal letters van het alfabet), en je past daar een floor() op toe zodat het bekomen getal naar beneden op een integer(geheel getal) afgerond wordt.
En dan neem je de letter die overeenkomt met dit getal in die eerste array. En dat doe je 16 keer.

Simpel toch, niet ?

edit: en als je elke letter maar éénmaal mag gebruiken, dan sla je de reeds gebruikte letters of hun overeenkomstige cijfer (vd array) ergens in een array op of zo, en wanneer deze opnieuw genomen wordt, negeer je dat en zoek je opnieuw, zonder dat je het "aantal keer gevonden" verhoogt.

bij 16 letters is de kans op een identieke combinatie te groot. Je moet het allemaal 1 voor 1 doen. Brute force 1 voor a al die paren afgaan.

Met 3 letters gaat heb je de volgende combinaties(let op de volgorde)

abc
acb
bac
bca
cab
cba

dat zijn 3! = 3×2×1 = 6 mogelijkheden. Je moet steeds beginnen met het op een rijtje zetten, dan de laatste en 1 na laaste omwisselen, dan de 2 na laatste met de een na laatste en dan weer 2 keer de 2 laatste. Enz enz.

netzoals met binair tellen

eerst de 0, dan de 1, en dan schuift de 1 een plaats op en komt er een 0 bij 10, dan weer 11, en dan weer een plaatsje opschuiven 100, 101 110 111
enz enz

Chimera 20-02-2004 16:07

Code:

public class ExpoMain
{
        static void Main(string[] args)
        {
                if(args.Length < 1)
                        return;

                char[] theString = args[0].ToCharArray();
                Expo(theString);
        }

        public static void Expo(char[] theString)
        {
                char[] result;

                result = new char[theString.Length];
                Expo(theString, result, 0);
                Console.ReadLine();
        }

        public static void Expo(char[] theString, char[] result, int pos)
        {
                int i;
                for(i = 0;i < theString.Length;i++)
                {
                        result[pos] = theString[i];
                        if(pos < (theString.Length - 1))
                                Expo(theString, result, pos + 1);
                        else
                                            Console.WriteLine(new string(result));
                }
        }
}

Snap overigens niet helemaal hoe je bij 6 mogelijkheden voor abc komt, dit is de output voor "abc":
aaa
aab
aac
aba
abb
abc
aca
acb
acc
baa
bab
bac
bba
bbb
bbc
bca
bcb
bcc
caa
cab
cac
cba
cbb
cbc
cca
ccb
ccc

Dr HenDre 20-02-2004 16:35

dat is iets anders, dat is een keuze van 3 uit 3 met herhaling. Ik ging ervan uit dat het zonder herhaling was. Dus alle letters mogen maar 1 keer voorkomen.

met herhaling zijn het er 33 mogelijkheden. Zonder herhaling zijn dat er 3! ofterwel een permutatie van 3 uit 3 gedeeld door 1

PCRodent 20-02-2004 16:52

Ja lol en dan 16! mogelijkheden, x16 karakters heb je dan. Er zijn nuttigere manieren om je HD vol te krijgen...
Even rekenen:
Dan heb je 20922789888000 mogelijkheden, x16 = 334.764.638.208.000 karakters; dat wordt (mits je niet zipt, maar het lijkt me dat je dat pas achteraf zou doen...) een .txt van 304,466 TERABYTES

Veel plezier met programmeren :D

Waarom zou je het overigens willen :confused:

Dr HenDre 20-02-2004 17:00

Citaat:

PCRodent schreef op 20-02-2004 @ 17:52:
Ja lol en dan 16! mogelijkheden, x16 karakters heb je dan. Er zijn nuttigere manieren om je HD vol te krijgen...
Even rekenen:
Dan heb je 20922789888000 mogelijkheden, x16 = 334.764.638.208.000 karakters; dat wordt (mits je niet zipt, maar het lijkt me dat je dat pas achteraf zou doen...) een .txt van 304,466 TERABYTES

Veel plezier met programmeren :D

Waarom zou je het overigens willen :confused:

hehe, daar had ik nog niet aan gedacht :D :D Wordt idd leuk (y) :p

Chimera 21-02-2004 08:25

Citaat:

PCRodent schreef op 20-02-2004 @ 17:52:

Veel plezier met programmeren :D

De source staat een paar regels terug, die werkt prima met een string van 16 characters.

PCRodent 21-02-2004 09:45

Okee, okee....

Veel plezier met uitvoeren dan :D

iamcj 21-02-2004 11:49

Waarom wil je het, misschien is een andere oplossing.

Dr HenDre 21-02-2004 12:18

Citaat:

iamcj schreef op 21-02-2004 @ 12:49:
Waarom wil je het, misschien is een andere oplossing.
dat vroeg ik me idd ook af..

Orion 21-02-2004 13:19

Citaat:

Dr HenDre schreef op 20-02-2004 @ 13:29:
dan heb je 16! mogelijkheden.
euhw... 26^16 toch?

Dr HenDre 21-02-2004 14:22

Citaat:

Orion schreef op 21-02-2004 @ 14:19:
euhw... 26^16 toch?
neej. Dat is als je uit 26 letters 16 keer met herhaling kiest. Tis zo, voor de eerste letter(als je alle letters gebruikt) heb je 26 mogelijkheden. Voor de 2de letter heb je ook 26 mogelijkheden. Samen wordt dat 26×26= 262. En zo is dus 2616 dat je 16 keer een willekeurig letter kiest uit het alfabet, zonder dat je kijkt of je gebruikte letter al een keer is voorgekomen. :)


Alle tijden zijn GMT +1. Het is nu 21:20.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.