Код C ++ для прямоугольного треугольника с использованием цикла WHILE - PullRequest
0 голосов
/ 27 августа 2011

Мне нужно напечатать этот треугольник:

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

с использованием цикла FOR и WHILE. Мне нужна помощь, я уже выяснил версию цикла for, мне просто нужно преобразовать ее в цикл while, но все, что я пытаюсь, не дает мне правильного вывода! Любая помощь приветствуется!

Пока мой код:

#include <iostream>
using namespace std;
int main(int argc, char**argv) {

    int i = 1;
    int j = 1;
    int N = 8;

    while (i <= N)
    {
        i = i++;
        while(j <= i)
        {
            cout<<"*";
            j = j++;
        }
        cout<<endl;
    }
}

Ответы [ 6 ]

3 голосов
/ 27 августа 2011

Я дам вам подсказку (для того, чтобы вы сами кое-что выяснили): Вы забыли установить j обратно на 1 после внутреннего цикла.

Кактеперь, когда j становится <= i один раз, он остается таким же, и внутренний цикл больше никогда не вводится.

Кроме того, хотя это не имеет прямого отношения к вашему вопросу, убедитесь, что никогда не делать j = j++ или i = i++;просто сделайте j++ и i++ (как сказал Кшидж Мехта в комментариях).Если вам интересно, почему, вы можете прочитать этот вопрос и ответы на него .

1 голос
/ 27 августа 2011

Каковы правила?

while (1)
{
    cout << "*" << '\n';
    cout << "**" << '\n';
    cout << "***" << '\n';
    cout << "****" << '\n';
    cout << "*****" << '\n';
    cout << "******" << '\n';
    cout << "*******" << '\n';
    cout << "********" << '\n';

    break;
}
1 голос
/ 27 августа 2011

Я также дам вам подсказку: i = i++; не делает то, что вы думаете, он делает.

0 голосов
/ 07 января 2019
#include <iostream>   

using namespace std;    

int main() 
{
    int i, j, N=7;  
    while(i <= N)
    {  
        i++;  
        j = 1;  
        while(j <= i)
        {
            cout << "*";  
            j++;
        }
        cout << endl;  
    }  
}
0 голосов
/ 27 августа 2011

Я действительно не знаю, как сделать его более кратким, чем это:

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss;
    int i = 10;
    while (i--)
        std::cout << (ss<<'*', ss).str() << std::endl;
}

или что касается петли, вырезающей линию

for(int i=10; i--;)
        std::cout << (ss<<'*', ss).str() << std::endl;

Если вы не возражаете против менее эффективного кода:

#include <iostream>
int main() { for(int i=1; i<10; std::cout << std::string(i++, '*') << std::endl); }
0 голосов
/ 27 августа 2011

Я не вижу ваш треугольник, но я думаю, вам нужно установить j в 1 до каждого цикла на j:

while (i <= N)
{
    i++;
    j = 1;
    while(j <= i)
    {
        cout<<"*";
        j++;
    }
    cout<<endl;
}
...