Звездочки Формы

Мне нужно сделать эту форму (или похожую) из звездочек:

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

Я немного знаю, как сделать «вложенные для циклов». Я могу сделать только один треугольник, и мне нужно два рядом друг с другом …

#include <iostream>
using namespace std;

int main()
{
cout<<"Insert A Number...\n" <<endl;
int i;
int j;
int size;
cin >> size;
for(i=1;i<size*2;i+=2)
{
cout<<endl;
for(j=(size-i)/2+1;j>=0;j--)
{
cout<<' ';
}
for(j=0;i>j;j++)
{
cout<<'$';
}
}
cin.get();
return 0;
}

-2

Решение

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
cout << "Insert A Number...\n" << endl;
int size;
cin >> size;

int user_rows = size;
int user_cols = ceil(user_rows / 2.0)*2;

for (int row = 1; row <= user_rows; row++) { //print each row of asterisks

int asterisksPerSide = (row * 2 <= user_rows) ? row : user_rows - row + 1;
int spacesTotal = user_cols - (2 * asterisksPerSide);

for (int asterisksPrinted = 0; asterisksPrinted < asterisksPerSide; asterisksPrinted++) { //print first part of row
cout << "*";
}

for (int spacesPrinted = 0; spacesPrinted < spacesTotal; spacesPrinted++) { //print spaces
cout << " ";
}

for (int asterisksPrinted = 0; asterisksPrinted < asterisksPerSide; asterisksPrinted++) { //print last part of row
cout << "*";
}
cout << endl;
}
}
0

Другие решения

Несколько замечаний, чтобы помочь вам:

  1. Первые N строк содержат количество звездочек в качестве строки
    число.
  2. Считайте фигуру прямоугольником, где один треугольник
    звездочки, остальные пробелы.
  3. Вторая фигура на той же линии является зеркалом первой.
  4. Строки после N уменьшают число звездочек, но увеличивают
    количество пробелов

Например, если N равно 10:
В строке 1 1 звездочка, 10-1 пробел, 10-1 пробел, 1 звездочка.
Линия 2 имеет 2 звездочки, 10 — 2 пробела, 10 — 2 пробела, 2 звездочки.
В строке 3 есть 3 звездочки, 10 — 3 пробела, 10 — 3 пробела, 3 звездочки.
Строка 4 имеет 4 звездочки, 10 — 4 пробела, 10 — 4 пробела, 4 звездочки.
// …
Линия 11 имеет 9 звездочек, 10 — 9 пробелов, 10 — 9 пробелов, 9 звездочек.
Линия 12 имеет 8 звездочек, 10 — 8 пробелов, 10 — 8 пробелов, 8 звездочек.
Линия 13 имеет 7 звездочек, 10 — 7 пробелов, 10 — 7 пробелов, 7 звездочек.

Видишь какие-то шаблоны?

1

Ваш код печатает треугольник с вершиной вверху. То, что вы хотите, это боковой треугольник — два из них, на самом деле. Чтобы понять, как это сделать, проработайте пример на бумаге.

В случае, который вы отобразили выше, предполагая, что ввод был 3как бы вы напечатали каждую строку?

  • Линия 1 имеет одну звезду слева и одну звезду справа.
  • Линия 2 имеет две звезды слева и две звезды справа.
  • Линия 3 имеет три звезды слева, одну звезду посередине и три звезды справа.
  • Линия 4 имеет две звезды слева и две звезды справа.
  • Линия 5 имеет одну звезду слева и одну звезду справа.

Простой способ узнать количество звезд на каждой стороне — это сосчитать 1 в 3, затем обратный отсчет от 2 в 1, Теперь вам просто нужно рассчитать количество пробелов в строке. Существует также проблема одинокой звезды в центре самой длинной линии, что означает, что вам придется иметь дело с этой линией отдельно.

Программа ниже выводит на экран именно тот результат, который вы отображали в своем вопросе, когда пользователь вводит 3, Обратите внимание, как я определил пару вспомогательных функций, repeat() а также printRow(), чтобы избежать написания одного и того же кода несколько раз.

#include <iostream>
#include <string>
using namespace std;

void repeat(int n, string s) {
for (int i = 0; i < n; ++i) {
cout << s;
}
}

void printRow(int size, int i) {
repeat(i, "* ");
repeat(2*(size-i)+1, "  ");
repeat(i-1, "* ");
cout << "*" << endl;
}

int main() {
cout << "Enter a number:" << endl;
int size;
cin >> size;
for (int i = 1; i < size; ++i) {     // Rows of increasing length.
printRow(size, i);
}
repeat(2*size, "* ");                // Middle row.
cout << "*" << endl;
for (int i = size-1; i >= 1; --i) {  // Rows of decreasing length.
printRow(size, i);
}
return 0;
}
0

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

0
По вопросам рекламы [email protected]