Advertisement
Jvsierra

prob

Mar 22nd, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define MAXFILA 30
  5.  
  6. struct TpFila
  7. {
  8.     int Inicio, Fim, Cont;
  9.     int Fila[MAXFILA];
  10. };
  11.  
  12. void Inicializar(TpFila &F)
  13. {
  14.     F.Cont = 0;
  15.     F.Inicio = 0;
  16.     F.Fim = -1;
  17. }
  18.  
  19. void Inserir(TpFila &F, int C)
  20. {
  21.     if(F.Fim == MAXFILA - 1)
  22.         F.Fim = -1;
  23.        
  24.     F.Fila[++F.Fim] = C;
  25.    
  26.     F.Cont++;
  27. }
  28.  
  29. int Retirar(TpFila &F, int n)
  30. {
  31.     int L = F.Fila[F.Inicio++];
  32.    
  33.     if(F.Inicio == n)
  34.         F.Inicio = 0;
  35.    
  36.     F.Cont--;  
  37.        
  38.     return L;
  39. }
  40.  
  41. char Cheia(int Qtde)
  42. {
  43.     return Qtde == MAXFILA;
  44. }
  45.  
  46. char Vazia(int Qtde)
  47. {
  48.     return Qtde == 0;
  49. }
  50.  
  51. char ElemInicio(TpFila F)
  52. {
  53.     return F.Fila[F.Inicio];
  54. }
  55.  
  56. char ElemFim(TpFila F)
  57. {
  58.     return F.Fila[F.Fim];
  59. }
  60.  
  61. void Exibe(TpFila F)
  62. {
  63.     while(!Vazia(F.Cont))
  64.         printf("%d\n", Retirar(F, MAXFILA));
  65. }
  66.  
  67. int main(void)
  68. {
  69.     TpFila F, Aux;
  70.     int n, k, m, i, posH, posAH, c;
  71.    
  72.     scanf("%d %d %d", &n, &k, &m);
  73.    
  74.     while(n > 0 && k > 0 && m > 0)
  75.     {
  76.         Inicializar(F);
  77.         Inicializar(Aux);
  78.        
  79.         for(i = 1; i <= n; i++)
  80.             Inserir(F, i);
  81.            
  82.         posH = 0; posAH = n;
  83.        
  84.         while(!Vazia(F.Cont))
  85.         {
  86.             posH += k;
  87.            
  88.             if(posH > n)
  89.                 posH = posH % F.Cont;
  90.                        
  91.             if(posH == 0)
  92.                 posH = n;
  93.            
  94.             posAH -= m;
  95.            
  96.             if(posAH < 0)
  97.                 posAH = posAH % F.Cont;
  98.            
  99.             while(F.Inicio != posH - 1)
  100.                 Inserir(Aux, Retirar(F, n));
  101.                
  102.             i = Retirar(F, n);
  103.            
  104.             while(!Vazia(F.Cont))
  105.                 Inserir(Aux, Retirar(F, n));
  106.  
  107.             /*if(c > 0)
  108.                 printf(",");
  109.             */
  110.             if(i < 10)
  111.                 printf("  ");
  112.             else if(i < 100)
  113.                 printf(" ");
  114.            
  115.             if(posAH != posH)
  116.             {
  117.                 posAH--;
  118.                
  119.                 if(posAH < 0)
  120.                     posAH = n - 1;
  121.                
  122.                 while(!Vazia(Aux.Cont) && Aux.Inicio != posAH)
  123.                     Inserir(F, Retirar(Aux, n));
  124.                
  125.                 i = Retirar(Aux, n);
  126.                
  127.                 if(i < 10)
  128.                     printf("  ");
  129.                 else if(i < 100)
  130.                     printf(" ");
  131.                
  132.                 //printf("%d", i); 
  133.                
  134.                 while(!Vazia(Aux.Cont))
  135.                     Inserir(F, Retirar(Aux, n));
  136.             }
  137.        
  138.             while(!Vazia(Aux.Cont))
  139.                 Inserir(F, Retirar(Aux, n));
  140.        
  141.             printf("\n");
  142.             Exibe(F);
  143.        
  144.             c++;
  145.         }
  146.        
  147.        
  148.         printf("\n");
  149.        
  150.         scanf("%d %d %d", &n, &k, &m); 
  151.     }
  152.    
  153.     return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement