2013-12-01 2 views
0

Я хочу что-то вроде этого:Я хотел бы знать, как сделать звездочку правильный треугольник (S) в C++ с использованием цикла

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

Я попытался это:

void roadBound() { 

    for(int i = 1; i <= 10; i++){ 
     for(int j = 0; j < i; j++){ 
      cout << "*" ; 
     } 
     cout << endl; 
    } 
} 

Но не было даже близко. Пожалуйста, помогите

ответ

0

Это использует 3 петли в другую петлю

const int ROW = 4; 
const int GAP = 7; 

for (int i=ROW, g=GAP; i>=0; i--, g+=2) 
{ 
    for (int j=0; j<i; j++) cout << '*'; 
    for (int j=0; j<g; j++) cout << ' '; 
    for (int j=0; j<i; j++) cout << '*'; 
    cout << '\n'; 
} 

Выход

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

Live code

+0

Я не знаю, кто голосовал. Это было очень полезно для меня – user3015519

+0

Нет проблем, это просто доказывает, что мы можем найти глупых людей повсюду даже в SO. – deepmax

0

Вы можете попробовать это

int lf=4,md=4, N=4; 
for(int i = 1; i<=N; i++) 
{ 
    for(int j =1; j<=lf; j++) 
     cout<<"*"; 
    for(int j =1; j<=md; j++) 
     cout<<" "; 
    for(int j =1; j<=lf; j++) 
     cout<<"*"; 
    cout<<"\n"; 
     lf--; 
     md+=2; 
} 
1

До сих пор код пр oduces это:

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

Который выглядит довольно хорошо прямоугольного треугольника, так что я думаю, что вы на правильном пути. Чтобы сделать изображение, которое у вас было выше, вам нужно бросить несколько пробелов и убедиться, что каждая строка имеет одинаковую длину. Если все в порядке, я думаю, что то, что вы просите, проще с помощью только одного цикла. Попробуйте это:

#include <iostream> 
#include <string> 
using std::cout; 
using std::endl; 
using std::string; 

int main() { 
int height = 4; 
int line = height * 4; 
for(int i = height; i > 0; --i){ 
     string stars (i, '*'); 
     int space = line - (i * 2); 
     string spaces (space, ' '); 
     cout << stars << spaces << stars << endl; 
    } 
} 

Этот код производит:

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

, который, кажется, есть еще несколько пробелов, чем ваш пример там, но вы можете исправить это, добавив переменную перед циклом для максимума длина пространства, которую вы хотите, а затем уменьшаете ее на два каждый раз через цикл.

0
void roadBound(int n) { 
    const int gap = 6; 
    string str = string(n, '*') + string(gap, ' ') + string(n, '*'); 
    int f=n,b=n+gap-1; 
    while(n--){ 
     str[f--]=str[b++]=' '; 
     cout << str << endl; 
    } 
} 
-1

Первый треугольник

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

Это будет код выше треугольника:

for (int i = 5; i > 0; i--){ 
    for (int j = 5; j > 0 ; j--){ 
     if (i < j){ 
     cout << ' ' ;; 
     } 
     else { 
     cout << '*'; 
     } 
    } 
    cout << endl; 
} 

Второй треугольник

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

Это будет код для другого треугольник:

for (int i = 5; i > 0; i--){ 
    for (int j = 0; j < i ; j++){ 
     cout << '*'; 
    } 
    cout << endl; 
} 

В другом цикле нет необходимости в трех петлях. Вы можете сделать оба из них только с двумя циклами. Один из них просто необходим для определения того, следует ли размещать звездочку или пробел.

Смежные вопросы