Почему код дает мне неправильный треугольник? - PullRequest
0 голосов
/ 06 февраля 2019

Сделать треугольник

*
**
***
****
*****
******
*******
********
*********
**********
***********
************

int rows = 12, i = 1, j = 1;

    while(i <= rows)
    {
        while(j <= i)
        {
            printf("*");
            j++;

        }
        printf("\n");
        i++;
        j=1;

Я пытаюсь сделать треугольник как

********
*******
******
*****
****
***
**
*

, но я ошибаюсь.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

В основном вы должны поменять петли.Таким образом, для каждого цикла в вашем коде вы увеличиваете количество экземпляров '*', которые печатаются для каждой итерации i.Это потому, что i и j начинаются с 1 и увеличиваются до тех пор, пока число итераций не станет равным rows.

int rows = 12, i = 1, j = 1;

while (i <= rows)
{
    while (j <= (rows - i +1))
    {}
}

. То, что вы хотите, это начинать с 12 и уменьшать каждый раз, пока вынажмите 0. Таким образом, для начала вы можете потерять переменную rows и установить i и j равными 12. Во внешнем цикле while() вы хотите уменьшить i и каждый раз сбрасывать j = iвнутренний цикл закрывается.Внутренний цикл должен печатать * и уменьшать j.Ниже приведены мои решения, но ответ Loc Tran работает так же хорошо.

int main(void){
int i = 12, j = 12;

while(i >=0)
{
    while(j >= 0)
    {
        printf("*");
        j--;

    }
    printf("\n");
    i--;
    j=i;
}

}

Если это для школьного задания (у меня был один очень похожий вкурс 1-го курса) Я предлагаю вам попытаться понять, почему ваш код отличается от предоставляемых решений.

0 голосов
/ 06 февраля 2019

У вас проблема с

while(j <= i) 

петлей.Вот мое решение:

int rows = 12, i = 1, j = 1;

while (i <= rows)
{
    while (j <= (rows - i +1))
    {
        printf("*");
        j++;

    }
    printf("\n");
    i++;
    j = 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...