Advertisement
VitorMDias

exercicio lindjo

Sep 2nd, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <ctype.h>
  6.  
  7. #define MAX 17
  8. #define MAX_VETOR 100000
  9.  
  10. int IntPow (int n)
  11. {
  12.     int i , result;
  13.     result = 1;
  14.     for(i=0;i<=n;i++)
  15.     {
  16.         result = result * 2;
  17.     }
  18.     if(n == 0)
  19.         return 1;
  20.     else
  21.         return result;
  22. }
  23.  
  24. void aumenta(char * A )
  25. {
  26.     while(*A != '\0')
  27.     {
  28.         *A = toupper(*A);
  29.         A++;
  30.     }
  31.    
  32.    
  33. }
  34.  
  35. int comp(const void *P1, const void *P2){
  36.     char *A = (char *)P1, *B  = (char *)P2;
  37.     return strcmp(A, B);
  38. }
  39.  
  40. int main()
  41. {
  42.     int k , j , n , i, aux, Axu, Axu2, Y, cont;
  43.     char zuera[26],palavra[MAX] , comb[MAX_VETOR][MAX];
  44.     scanf("%d" , &n);
  45.     while(n--)
  46.     {
  47.         scanf("%s" , palavra);
  48.         aumenta(palavra);
  49.        
  50.         for(i=0; i < 26; i++)
  51.             zuera[i] = 0;
  52.        
  53.         aux = strlen(palavra);
  54.        
  55.         if(aux == 1)
  56.             printf("%s" , palavra);
  57.         else
  58.         {
  59.         for(i=0; i < aux && palavra[i] != '\0'; i++)
  60.             zuera[ palavra[i] - 'A' ] = 1;
  61.        
  62.         aux = 0;
  63.        
  64.         for(i=0; i < 26; i++)
  65.             if( zuera[i] == 1 )
  66.                 palavra[aux++] = i + 'A';
  67.         palavra[aux] = '\0';
  68.        
  69.         Axu = Axu2 = 0;
  70.         aux = strlen(palavra) - 1;
  71.         Axu = IntPow(aux);
  72.         Axu2 = strlen(palavra);
  73.         for(i=1;i< Axu;i++)
  74.         {
  75.             Y = i;
  76.             k = 0;
  77.             for(cont=0;cont<Axu2;cont++)
  78.             {
  79.                 if(Y % 2 == 1)
  80.                     comb[i][k++] = palavra[cont];
  81.                 Y = Y / 2;
  82.             }
  83.             comb[i][k] = '\0';
  84.         }  
  85.        
  86.         qsort( comb , Axu, sizeof(comb[0]), comp);
  87.        
  88.         for( i = 1; i < Axu; i++ ){
  89.         if(i == Axu - 1)
  90.             printf("%s", comb[i]);
  91.         else
  92.             printf("%s ", comb[i]);
  93.         }
  94.         }
  95.         printf("\n");
  96.        
  97.     }
  98.    
  99.    
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement