[C] Array.

di il
10 risposte

[C] Array.

Ciao a tutti.
Mi viene chiesto di determinare tutti i possibili anagrammi di un array di 5 caratteri in C.
Come posso idearlo?
Avevo pensato a dei cicli for annidati, ma come procedere? Mi dareste qualche idea, per favore?

10 Risposte

  • Re: [C] Array.

    Inizia col mostrare il codice che hai scritto. Poi se hai problemi , vedremo come risorverli.
  • Re: [C] Array.

    Il problema è che ho difficoltà ad iniziare. A me non interessa il codice finale, mi interessa solo capire l'esercizio...
    Se mmi potete dare qualche input...
  • Re: [C] Array.

    Prova con qualcosa di più semplice, l'anagramma di 3 caratteri. L'anagramma fallo anche a mano su carta, i caratteri mica li dai a caso ...
  • Re: [C] Array.

    Se sono due, è banale e l'ho scritto anche in C.
    Se sono tre, invece, l'ho fatto a penna: mantengo fisso un carattere come primo elemento della stringa e inverto gli altri 2... no? Ma come fare questo ora in C?
  • Re: [C] Array.

    Intanto , creati la soluzione matematica.

    con 3 lettere quanti anagrammi avrai?
  • Re: [C] Array.

    Sono 6 = 3!
  • Re: [C] Array.

    alfiere17 ha scritto:


    Sono 6 = 3!

    Quindi, ad esempio, una delle possibili soluzioni sarebbe di crearsi una matrice (6 righe= 6 soluzioni per 3 colonne = 3 lettere) e poi inserire le varie diposizioni.

    Non andare subito al codice, cerca di creare il diagramma di flusso prima.

    EDIT: (in realtà sarebbero n+1 colonne (con n = numero di lettere) se immetti la stringa con i caratteri da tastiera, ma questo punto è da considerarlo successivamente, intanto creati l'algoritmo
  • Re: [C] Array.

    Non riesco ad idearlo...
  • Re: [C] Array.

    Interpretando estensivamente il testo del problema "determinare tutti i possibili anagrammi di un array di 5 caratteri" come "determinare tutte le permutazioni di un array di cinque caratteri" (a rigore gli anagrammi devon essere altre parole di senso compiuto, presenti in un vocabolario, formate con tutte e sole le lettere di una parola data), devi innanzi tutto studiare e capire uno dei più semplici algoritmi combinatori, quello di Steinhaus-Johnson-Trotter.


    PS: cortesemente, modifica il titolo del thread in qualcosa come "[C] Generare tutte le permutazioni di un array".
  • Re: [C] Array.

    
    printf( "%d%d%d" , n[0] , n[1] , n[2] );
    printf( "%d%d%d" , n[0] , n[2] , n[1] );
    printf( "%d%d%d" , n[1] , n[0] , n[2] );
    printf( "%d%d%d" , n[1] , n[2] , n[0] );
    printf( "%d%d%d" , n[2] , n[0] , n[1] );
    printf( "%d%d%d" , n[2] , n[1] , n[0] );
    
    Questo è il codice per stampare le permutazioni di 3 elementi, 3!=6; .. invece che 6 printf, potresti usare un for unita ad uno scambio dei valori
    
    for( int a = 0; a < 3 ; a++ )
    {
        printf( "%d%d%d" , n[0] , n[1] , n[2] );
        printf( "%d%d%d" , n[0] , n[2] , n[1] );
    
    /* funzione scambia */
        sc = n[0];
        n[0] = n[1];
        n[1] = n[2];
        n[2] = sc;
    }
    in guesto modo fai girare il contenuto dell'Array, ed adoperi le stesse printf

    Però con n elementi, le printf diventano (n-1)! quindi 24, e lo scambio devi farlo con tutti e 5 elementi , quindi devi usare la ricorsione.
Devi accedere o registrarti per scrivere nel forum
10 risposte