Построение полудерева в C

#c #for-loop

Вопрос:

Я пытаюсь построить следующую форму полудерева

 x xx xxx xxxx xxxxx .... N xxxxx  

но я не могу добраться до «*» в середине. Вместо этого у меня есть пробелы, созданные вторым циклом.

Код, который я использовал:

 #include lt;stdio.hgt;   main(){   int N;  int i,j;  printf("Enter the number: ");   scanf("%d",amp;N);  for (i=1;ilt;=N;i  ){  printf("x");   for(j=1; jlt;=(N-i); j  ){   printf(" ");   }  printf("x");  printf("n");  } }  

Не могли бы вы, пожалуйста, посоветовать, как я собираюсь заполнить *ы?

Заранее спасибо.

редактировать на основе комментариев

Если я изменю printf(" "); с printf("x"); , я получу перевернутое полудерево, как показано ниже для N=6

 xxxxxx xxxxx xxxx xxx xx x  

Комментарии:

1. Ты имеешь в виду printf(" "); ? Почему бы просто не изменить это на printf("x"); ?

2. Почему вы вообще печатаете пробелы? Для вашего шаблона не требуется никаких пробелов. Также вы печатаете не менее 2* 'x' в строке. Один до и один после внутреннего цикла. Это не сработает для первой строки.

3. но я не могу добраться до » » в середине. Вместо этого у меня есть пробелы, созданные вторым циклом.* Это потому, что второй цикл печатает пробелы (пробелы). Если вы не напечатаете пробелы, вы не получите пробелов. 🙂

4. printf("x") Так и должно быть на самом деле printf('*') ?

5. Эй, я провел несколько тестов и, как вы упомянули, допустил ошибку в отношении «*» и «x».

Ответ №1:

Измените условие во втором for цикле с jlt;=(N-i) на j lt; i . Смотреть ниже.

полдерева.c

 #include lt;stdio.hgt;  int main(int argc, char * argv[]){  int N;  int i, j;   N = atoi(argv[1]);   for(i=0; i lt; N; i  )  {  printf("*");   for(j=0; j lt; i; j  )  printf("*");   printf("n");  }   return 0; }  

Скомпилируйте и запустите описанное выше, используя приведенные ниже команды

 gcc halfTree.c -o halfTree ./halfTree 4