How Tall? 3 * ** ***
How tall 3? * * * * * * _| |_ \___/
et c'est ce que j'obtiens. Quel est le problème avec mon code? et comment vais-je corriger le code?
void printer(int input) { int star; int space; for (int i = 1; i <= input; i++) { star = i; space = i + input - star - 1; for (int j = 0; j < space; j++) { printf(" "); } for (int s = 0; s < star; s++) { printf("*"); } printf("\n"); } }
4 Réponses :
votre format est le problème. comme vous connaissez déjà la taille de l'arbre, vous pouvez déduire la taille du premier ensemble d'espaces (les premiers espaces sur chaque ligne), soit espaces = (taille - 1) - i
. il devrait être, pour chaque i:
i1 = 2 i2 = 1 i3 = 0
qui semble être ce que le résultat donne. de plus, entre tous les astérisques, insérez simplement un espace jusqu'au dernier caractère, et c'est l'idée
Il y a trop de choses qui ont mal tourné avec cela. Je ne publierai pas le code correct, mais je pourrai vous guider à travers.
Puisque vous voulez de l'espace après les étoiles, imprimez "*"
au lieu de "*"
Vous devez utiliser un espace décrémentiel au début, avant d'imprimer l'étoile, il y a un défaut logique à cela, c'est-à-dire que vous ajoutez et soustrayez i et étoile, qui sont la même chose. Vous devez donner des espaces (entrée - étoile) pour la boucle.
Pour le tronc, vous devez développer une logique symétrique. J'espère que cela vous aidera.
Essentiellement, cet extrait de code que vous utilisez ici:
* * * * * * _| |_ \___/
équivaut à écrire:
void printer(int input) { int star; int space; // Store the original length of the space int space_length = input; for (int i = 1; i <= input; i++) { star = i; // Get the number of spaces for the current iteration space = space_length - 1; for (int j = 0; j < space; j++) { printf(" "); } for (int s = 0; s < star; s++) { printf("* "); // ^ note this space after the asterisk } // Decrease the length of the space every step // So that it appears like a slope // Note how we are using 'space_length' instead of input // This is because if we decrement 'input', this loop // will get affected, which is not what we want space_length--; printf("\n"); } ///////// bottom part of the tree ///////// // number of spaces needed = input - length of "_| |_" - 1 for (int i = 1; i <= input - (4 - 1); i++) printf(" "); printf("_| |_\n"); // number of spaces needed = input - length of "\\___/" - 1 for (int i = 1; i <= input - (4 - 1); i++) printf(" "); printf("\\___/\n"); }
C'est parce que i et star
ont la même valeur (quoth star = i
), et par conséquent, s'annulent mutuellement.
Maintenant, pouvez-vous voir une constante ici? Oui, la valeur de input
n'est jamais modifiée nulle part, et donc votre code est toujours ce que 1 de moins que l'entrée. (Dans ce cas, il est toujours précédé de 2
( = 3-1
) espaces) comme ceci:
* ** *** ^^ mark two spaces
Et vous avez également oublié d'ajouter un espace de fin après l'astérix et il n'y a donc pas d'espacement entre eux.
Par conséquent, pour résoudre votre problème, vous pouvez stocker temporairement la valeur de input
et la réduire de 1 à chaque itération pour qu'elle ressemble à une pyramide.
Exemple:
star = i; space = input - 1;
qui donne la sortie:
star = i; space = i + input - star - 1; // or, space = input - 1 + i - star;
Vous pouvez le faire comme ceci:
#include <stdio.h> void printer(int input) { // for stars for (int i = 1; i <= input; i++) { for (int j = 1; j <= input - i; j++) { printf(" "); } for (int k = 1; k <= i; k++) { if (k == 1) printf("*"); else printf(" *"); } printf("\n"); } // for base int base_half_len = input - 1; for (int i = 1; i < base_half_len; i++) { printf("_"); } printf("| |"); for (int i = 1; i < base_half_len; i++) { printf("_"); } printf("\n\\"); for (int i = 1; i < 2 * input - 2; i++) { printf("_"); } printf("/\n"); } int main(void) { // your code goes here printer(10); return 0; }
Voici le lien où je l'ai testé: https://ideone.com/7zpNeW
trouver le point médian et imprimer le coffre
ne publiez pas d'images de code. Postez le code.