Как напечатать равнобедренный треугольник в C ++ - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать равнобедренный треугольник с символом '*' из пользовательского ввода в C ++.

Например, при вводе пользователем 5, я должен получить:

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

Я получаю только:

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

Мой код c ++:

void askData(int &n){
    cout<<"Enter a number: ";
    cin>>n;
}

void print(int A){
    for(int j=1;j<=A;j++)
    cout<<"*";
    cout<<endl;
}

void createIsoscTriangle(int n){

    for(int i=1;i<=n;i++){
    print(i);
}

int main()
{
    int n;
    askData(n);
    createIsoscTriangle(n);
    return 0;
}

Как я могу получить правильную форму равнобедренного треугольника?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Вы печатаете только последовательность 1 2 3 4 5. Вам также нужен al oop, который будет вести обратный отсчет.

void createIsoscTriangle(int n) {
    for(int i = 1; i <= n; i++)
      print(i);
    for(int i = n-1; i >= 1; i--)
      print(i);
}
2 голосов
/ 09 апреля 2020

Шаблон звездочек 1, 2, 3, ..., n, n - 1, n - 2, ..., 1., как Брайан упомянул в комментариях. Таким образом, число звездочек для каждой строки будет равно n - abs(n - i), где abs - это абсолютное значение n - i, и это должно работать для любого n, а не только 5.

Я изменил вашу функцию createIsoscTriangle так:

void createIsoscTriangle(int n) {

    for(int i = 1; i <= n * 2 - 1; i++)
        print(n - abs(n - i)); 
}

Давайте попробуем ее для n = 5. Это напечатало бы фигуру, которую вы упомянули.

*
**
***
****
*****
****
***
**
*
...