Permutazione

di Anonimizzato18311 il
10 risposte
Salve a tutti, mi è stato assegnato un esercizio dove si deve generare una stringa binaria casuale di 16 elementi e metterla in un vettore fino a qui nessun problema, poi si devono mescolare casualmente le posizioni e qua che mi blocco come si può fare ciò evitando che venga scelta due volte la stessa posizione? Se qualcuno mi può dare un esempio di codice C ne sarei grato.
Grazie in anticipo

10 Risposte

  • Dovresti implementare un algoritmo ricorsivo che, preso il vettore di input, generi tutte le permutazioni (con ripetizione) di esso. Dovresti crearti dei vettori di mark e soluzione, nonchè ordinare il vettore di partenza (utile per i simboli ripetuti) e inizializzarli opportunamente. Adesso sei pronto per mettere in piedi la funzione ricorsiva che fa il lavoro che ti serve, spero averti dato l'idea di lavoro.
  • Spiega un po' meglio ... facci vedere la parte di codice che hai già scritto per la generazione della stringa. Facci vedere quale dovrebbe essere il risultato ...

    Penso che possa esserci soluzione più semplice ...
  • oregon ha scritto:


    Spiega un po' meglio ... facci vedere la parte di codice che hai già scritto per la generazione della stringa. Facci vedere quale dovrebbe essere il risultato ...

    Penso che possa esserci soluzione più semplice ...
    Int main ()
    Int vet[15],I;

    srand(time(NULL));
    for(I=0;I<=15;I++){
    vet[I]=rand()%2;
    printf(“%d”,Vet[I]);
    }
    E fino a qui è facile mi crea 16 cifre tra 0 e 1 casuali, ma non ho proprio idea di come mischiarli casualmente
  • Facile ma sbagliato ... deve essere

    int vet[16],I;

    e

    printf(“%d”,vet[I]);

    Ad esempio avrai

    1000101010101011

    A partire da questo, ne devi ottenere un qualsiasi altro mischiando le cifre? Uno solo?
  • oregon ha scritto:


    Facile ma sbagliato ... deve essere

    int vet[16],I;

    e

    printf(“%d”,vet[I]);

    Ad esempio avrai

    1000101010101011

    A partire da questo, ne devi ottenere un qualsiasi altro mischiando le cifre? Uno solo?


    Si devo permutarlo una sola volta non mi servono tutte le combinazioni, però non saprei come fare perchè se gli metto un indice rand si creano conflitti perchè esce più volte lo stesso come potrei fare
  • Scegli due valori a caso tra 0 e 15 che chiamerai i e j.
    Scambia tra loro l'elemento i e j del vettore.
    Fai queste operazioni per un numero di volte a caso (tra 50 e 100 ad esempio) in un ciclo for.
  • Cioè data la sequenza : 1000101010101011

    dovresti generarne un'altra casuale che non sia quella ma che sia ad esempio: 0100101010101011 ?

    Oppure data la sequenza di partenza devi manipolarla per generarne un'altra, ad esempio la seconda?
  • SVNiko ha scritto:


    Cioè data la sequenza : 1000101010101011

    dovresti generarne un'altra casuale che non sia quella ma che sia ad esempio: 0100101010101011 ?

    Oppure data la sequenza di partenza devi manipolarla per generarne un'altra, ad esempio la seconda?
    Devo manipolare la prima
  • oregon ha scritto:


    Spiega un po' meglio ... Facci vedere quale dovrebbe essere il risultato ...
    Facci quest'esempio che onestamente non è che abbia capito molto fino ad ora.

    Se devi manipolare la prima basta scambiare due qualsiasi degli elementi ed hai una permutazione.
  • oregon ha scritto:


    Scegli due valori a caso tra 0 e 15 che chiamerai i e j.
    Scambia tra loro l'elemento i e j del vettore.
    Fai queste operazioni per un numero di volte a caso (tra 50 e 100 ad esempio) in un ciclo for.
    Grazie mille mi hai fatto venire l'idea!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte