Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #include <cstdio>
  2.  
  3. const int DIM_MAX = 1024;
  4.  
  5. const int X = 0;
  6. const int Y = 1;
  7.  
  8. const int REPERE_BAS_GAUCHE = 0;
  9. const int REPERE_BAS_DROITE = 1;
  10. const int REPERE_HAUT_GAUCHE = 2;
  11. const int REPERE_HAUT_DROITE = 3;
  12.  
  13. int repere[4][2] = {{1,-1},{-1,-1},{1,1},{-1,1}};
  14. int adjRepere[4][2] = {{REPERE_BAS_DROITE,REPERE_HAUT_GAUCHE},{REPERE_BAS_GAUCHE,REPERE_HAUT_DROITE},
  15.                        {REPERE_HAUT_DROITE,REPERE_BAS_GAUCHE},{REPERE_HAUT_GAUCHE,REPERE_BAS_DROITE}};
  16.  
  17. char draw_trable[DIM_MAX+1][DIM_MAX+1];
  18. int niveau;
  19.  
  20. void determine_coin(int x, int y, int n, int p_repere, int a_repere=-1)
  21. {
  22.     if(x < 1 || y < 1 || x > niveau || y > niveau)
  23.         return;
  24.  
  25.     if(n == 2)
  26.         draw_trable[y][x] = '*';
  27.  
  28.     if(n == 1)
  29.     {
  30.         if(p_repere == REPERE_HAUT_GAUCHE && a_repere == REPERE_BAS_GAUCHE
  31.         || p_repere == REPERE_HAUT_DROITE && a_repere == REPERE_HAUT_GAUCHE
  32.         || p_repere == REPERE_BAS_DROITE  && a_repere == REPERE_HAUT_DROITE
  33.         || p_repere == REPERE_BAS_GAUCHE  && a_repere == REPERE_BAS_DROITE
  34.         )
  35.             draw_trable[y][x] = '@';
  36.         else
  37.             draw_trable[y][x] = '#';
  38.         return;    
  39.     }
  40.  
  41.     if(n != 2)
  42.         determine_coin(x,y,n/2,p_repere);
  43.  
  44.     int nouveauRepereX = adjRepere[p_repere][X];
  45.     int coeffX = repere[p_repere][X];
  46.    
  47.     determine_coin(x+(n*coeffX)+(coeffX*-1),y,n/2,nouveauRepereX,p_repere);
  48.  
  49.     int nouveauRepereY = adjRepere[p_repere][Y];
  50.     int coeffY = repere[p_repere][Y];
  51.  
  52.     determine_coin(x,y+(n*coeffY)+(coeffY*-1),n/2,nouveauRepereY,p_repere);
  53.    
  54.     if(n!=2)
  55.         determine_coin(x+(n/4)*coeffX, y+(n/4)*coeffY,(n/2),p_repere,p_repere);    
  56. }
  57.  
  58. int main()
  59. {
  60.     scanf("%d", &niveau);
  61.     niveau = 1 << niveau;
  62.  
  63.     for(int x = 1 ; x <= niveau ; x++)
  64.         for(int y = 1 ; y <= niveau ; y++)
  65.             if(y > niveau/2 && x <= niveau/2)
  66.                 draw_trable[x][y] = ' ';
  67.             else
  68.                 draw_trable[x][y] = '.';
  69.  
  70.     if(niveau != 2)
  71.     {
  72.         determine_coin(1,niveau,niveau/2,REPERE_BAS_GAUCHE);
  73.         determine_coin(1,1,niveau/2,REPERE_HAUT_GAUCHE);
  74.         determine_coin(niveau,niveau,niveau/2,REPERE_BAS_DROITE);
  75.         determine_coin(niveau/4+1,niveau-(niveau/4),niveau/2,REPERE_BAS_GAUCHE);
  76.     }
  77.     else
  78.     {
  79.         draw_trable[2][2] = '#';
  80.         draw_trable[1][1] = '@';
  81.         draw_trable[2][1] = '*';
  82.     }
  83.     for(int x = 1 ; x <= niveau ; x++)
  84.     {
  85.         for(int y = 1 ; y <= niveau ; y++)
  86.             printf("%c", draw_trable[x][y]);
  87.         printf("\n");
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement