Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- const int DIM_MAX = 1024;
- const int X = 0;
- const int Y = 1;
- const int REPERE_BAS_GAUCHE = 0;
- const int REPERE_BAS_DROITE = 1;
- const int REPERE_HAUT_GAUCHE = 2;
- const int REPERE_HAUT_DROITE = 3;
- int repere[4][2] = {{1,-1},{-1,-1},{1,1},{-1,1}};
- int adjRepere[4][2] = {{REPERE_BAS_DROITE,REPERE_HAUT_GAUCHE},{REPERE_BAS_GAUCHE,REPERE_HAUT_DROITE},
- {REPERE_HAUT_DROITE,REPERE_BAS_GAUCHE},{REPERE_HAUT_GAUCHE,REPERE_BAS_DROITE}};
- char draw_trable[DIM_MAX+1][DIM_MAX+1];
- int niveau;
- void determine_coin(int x, int y, int n, int p_repere, int a_repere=-1)
- {
- if(x < 1 || y < 1 || x > niveau || y > niveau)
- return;
- if(n == 2)
- draw_trable[y][x] = '*';
- if(n == 1)
- {
- if(p_repere == REPERE_HAUT_GAUCHE && a_repere == REPERE_BAS_GAUCHE
- || p_repere == REPERE_HAUT_DROITE && a_repere == REPERE_HAUT_GAUCHE
- || p_repere == REPERE_BAS_DROITE && a_repere == REPERE_HAUT_DROITE
- || p_repere == REPERE_BAS_GAUCHE && a_repere == REPERE_BAS_DROITE
- )
- draw_trable[y][x] = '@';
- else
- draw_trable[y][x] = '#';
- return;
- }
- if(n != 2)
- determine_coin(x,y,n/2,p_repere);
- int nouveauRepereX = adjRepere[p_repere][X];
- int coeffX = repere[p_repere][X];
- determine_coin(x+(n*coeffX)+(coeffX*-1),y,n/2,nouveauRepereX,p_repere);
- int nouveauRepereY = adjRepere[p_repere][Y];
- int coeffY = repere[p_repere][Y];
- determine_coin(x,y+(n*coeffY)+(coeffY*-1),n/2,nouveauRepereY,p_repere);
- if(n!=2)
- determine_coin(x+(n/4)*coeffX, y+(n/4)*coeffY,(n/2),p_repere,p_repere);
- }
- int main()
- {
- scanf("%d", &niveau);
- niveau = 1 << niveau;
- for(int x = 1 ; x <= niveau ; x++)
- for(int y = 1 ; y <= niveau ; y++)
- if(y > niveau/2 && x <= niveau/2)
- draw_trable[x][y] = ' ';
- else
- draw_trable[x][y] = '.';
- if(niveau != 2)
- {
- determine_coin(1,niveau,niveau/2,REPERE_BAS_GAUCHE);
- determine_coin(1,1,niveau/2,REPERE_HAUT_GAUCHE);
- determine_coin(niveau,niveau,niveau/2,REPERE_BAS_DROITE);
- determine_coin(niveau/4+1,niveau-(niveau/4),niveau/2,REPERE_BAS_GAUCHE);
- }
- else
- {
- draw_trable[2][2] = '#';
- draw_trable[1][1] = '@';
- draw_trable[2][1] = '*';
- }
- for(int x = 1 ; x <= niveau ; x++)
- {
- for(int y = 1 ; y <= niveau ; y++)
- printf("%c", draw_trable[x][y]);
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement