Imprimer des caractères dans un motif X en utilisant des boucles for

J’essaie d’imprimer ce grand motif X:

xx xx xx xx x xx xx xx xx 

Je ne peux pas comprendre l’algorithme pour le faire. Je viens de commencer la programmation en C et de restr bloqué.

Ce que j’ai jusqu’ici c’est

 #include  int main() { int j,i; char ch[] = "$"; for(int j = 5; j >= 0 ; --j) { for(i = 5; i>=0; --i) { if(j%2 == 1) { printf("%s",ch); } } printf("\n"); } return 0; } 

J’ai aussi compris le motif,

 0 5 0 1 3 1 2 1 2 3 0 3 2 1 2 1 3 1 0 5 0 

Les nombres sur le bord sont les endroits où un * devrait apparaître. Les nombres au milieu sont les endroits où les espaces doivent apparaître. Qu’est-ce que je rate?

    Pour s’amuser un peu:

     int main (void) { int i; int w = 7; for (i=1;i<=w*(w+1);i++) printf ( "%c", i % (w+1) == 0 ? '\n' : i % (w) == 0 || i % (w+2) == 1 ? '*' : ' '); } 
     #include  int main(){ int n = 5 - 1; char ch[] = "x"; int i = 0, dx = 1; do{ printf("%*s%*.*s\n", i+1, ch, 2*(ni),2*(ni), ch); if((i += dx)==n) dx = -dx; }while(i>=0); return 0; } 

     for(;;){ printf("%*s%*.*s\n", i+1, ch, 2*(ni),2*(ni), ch); if((i += dx)==n) dx = -dx; else if(i < 0) break; } 

     int n = 5 - 1; char ch[] = "x"; int i = 0; for(; i < n ; ++i){ printf("%*s%*.*s\n", i+1, ch, 2*(ni),2*(ni), ch); } for(; i >=0 ; --i){ printf("%*s%*.*s\n", i+1, ch, 2*(ni),2*(ni), ch); } 

    Une légère extension de l’une des bonnes solutions ci-dessus pour la croix s’est avérée être un peu plus qu’un simple croisement de x:

     #include  int main(){ int n = 4 - 1; char ch[] = "x"; int i = 0, dx = 1; printf ("\n __\n ||----------------------------\n"); do { printf (" %s %*s%*.*s %*c\n", "||", 4*i+1, ch, 8*(ni), 8*(ni), ch, 4*i+1, '|'); if ((i += dx)==n) dx = -dx; } while (i>=0); printf (" ||----------------------------\n"); for (i = 0; i < 10; i++) printf (" ||\n"); printf ("------\n\n"); return 0; } 

    sortie:

     $ ./bin/flag __ ||---------------------------- || xx | || xx | || xx | || x | || xx | || xx | || xx | ||---------------------------- || || || || || || || || || || ------ 

    Voici votre programme avec un minimum de modifications pour faire ce que vous voulez:

     #include  int main() { int j,i; char ch[] = "x"; // (1) int sz = 8; // (2) for( j = sz; j >= 0 ; --j) { for(i = sz; i>=0; --i) { if(sz-j == i || i == j)// (3) { printf("%s",ch); } else { printf(" "); // (4) } } printf("\n"); } return 0; } 

    Explication:

    (1) Tout d’abord, si vous voulez x, vous devez imprimer x 🙂

    (2) Utilisez une variable pour la taille afin de pouvoir jouer avec elle …

    (3) Vous devez imprimer deux x par ligne, c’est-à-dire deux fois dans la boucle intérieure.

    Ces positions sont situées sur les deux diagonales où x == y (ici i == j) ou x == 8 – y (ici i == sz -j)

    (4) Vous devez imprimer un espace sinon

    Voir ici: https://eval.in/228155