fork download
  1. // ======================================================================================================
  2. // Programma per il calcolo degli anagrammi di una parola immessa
  3. // ======================================================================================================
  4.  
  5. #include <stdio.h>
  6. #include <string.h>
  7. #define MAX 50 // la parola sarà al massimo di 50 caratteri
  8.  
  9. int main(){
  10.  
  11. char stringa[MAX];
  12.  
  13. printf("+==============================================+\n");
  14. printf("| ELABORAZIONE ANAGRAMMA |\n");
  15. printf("+==============================================+\n");
  16. printf(" \n");
  17. printf(" Inserire una parola e premere invio \n");
  18.  
  19. gets(stringa);
  20.  
  21. printf("Le possibili combinazioni sono %d\n\n\a", fattoriale(strlen(stringa)));
  22.  
  23. anagramma(stringa, 0, strlen(stringa));
  24.  
  25. return 0;
  26. }
  27.  
  28. // ======================================================================================================
  29. // Funzione per il calcolo del fattoriale di un numero (cioè il numero di permutazioni)
  30. // ======================================================================================================
  31. int fattoriale(int n) {
  32.  
  33. int i, valore=1;
  34.  
  35. if ( n<0 )
  36. valore = 0;
  37. else
  38. for ( i=1 ; i<=n ; i++ )
  39. valore = valore * i;
  40. return valore;
  41. }
  42.  
  43. // ======================================================================================================
  44. // Funzione per l'elaborazione degli anagrammi/permutazioni della stringa (n lunghezza stringa)
  45. // ======================================================================================================
  46. void anagramma(char *string, int i, int n){
  47. int j;
  48.  
  49. if(i==n){ // per la ricorsione la stringa da anagrammare
  50. for(j=0; j<=n; j++) // si è ridotta ad un carattere
  51. printf("%c",string[j]);
  52. printf("\n");
  53. }
  54. else
  55. for(j=i; j<n; j++){
  56. scambia_indici(string, i, j); // la funzione anagramma richiama se stessa escludendo
  57. anagramma(string, i+1, strlen(string)); // ogni volta un elemento della stringa
  58. scambia_indici(string, i, j); // (l'anagramma di una stringa può essere considerato
  59. } // come la combinazione opportuna degli anagrammi delle
  60. } // sottostringhe che la compongono
  61.  
  62. // ======================================================================================================
  63. // la funzione scambia_indici effettua lo scambio degli elementi di una stringa dati gli indici degli stessi
  64. // ======================================================================================================
  65. void scambia_indici(char *string, int i, int j)
  66. {
  67. char tmp;
  68. tmp=string[i];
  69. string[i]=string[j];
  70. string[j]=tmp;
  71. }
Success #stdin #stdout 0s 10304KB
stdin
Standard input is empty
stdout
+==============================================+
|           ELABORAZIONE ANAGRAMMA             |
+==============================================+
    									        
     Inserire una parola e premere invio        
Le possibili combinazioni sono 1