Member 13837433 Ответов: 2

Как мне это напечатать-


______4
____4 3 4
__4 3 2 3 4
4 3 2 1 2 3 4
__4 3 2 3 4
___ 4 3 4
______4

Напишите программу на языке C++, чтобы получить описанную выше двойную пирамиду.
'_' - это указывает на пространство, вот как выглядит пирамида.

Что я уже пробовал:

#include <iostream>

using namespace std;

int main()
{
     int i,j;
     for(i=4; i>=1; i--){
        for(j=1; j<=i; j++){
           cout<<" ";
        }
     for(int j=4; j>=i; j--){
        cout<<j;
     }
          for( j=i+1; j<=4; j++){
            cout<<j;
            cout<<'\n';
          }
          for(i=2; i<=4; i++){
            for(j=1; j<i; j++){
                cout<<j;
            }
            for(j=1+i; j<=4; j++){
                cout<<j;
                cout<<'\n';
            }
          }

     }
      return 0;
}


Я попробовал это сделать, и у меня такое чувство, что я совершил какую-то действительно глупую ошибку. Пожалуйста, помогите мне.

2 Ответов

Рейтинг:
5

Patrice T

Давайте предположим, что на выходе слишком много строк

for( j=i+1; j<=4; j++){
    cout<<j;
    cout<<'\n'; // Remove this line
}
cout<<'\n'; // and put it there

Ваша программа сложна и предназначена только для размера 4.
небольшой анализ должен помочь сделать это лучше. Алмаз имеет вертикальную и горизонтальную симметрию, все находится вокруг центра (1)
Size Rows Cols Center
 1    1    1    0,0
 2    3    3    1,1
 3    5    5    2,2
 4    7    7    3,3

Не должно быть сложно хранить размер в переменной и уменьшать строки, Cols и Center.
Вы можете заметить, что все " 2 " находятся на расстоянии 1 col или 1 строки от центра.
"3" - это еще 1 шаг вперед: расстояние в строках + расстояние в кольцах дают вам значение в позиции.
если значение больше размера, выведите пробел.
Я позволил тебе заполнить дыры в качестве упражнения.

Совет:
- Изучите один или несколько методов анализа, E. W. Djikstra/N. Уирт Stepwize Refinment/метод сверху вниз это хорошее начало.
Структурного Программирования.формат PDF[^]
https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design[^]
https://en.wikipedia.org/wiki/Structured_programming[^]
https://en.wikipedia.org/wiki/Edsger_W._Dijkstra[^]
https://www.cs.utexas.edu/users/EWD/ewd03xx/EWD316.PDF[^]


Usman Hunjra

+5 ;)

Patrice T

"+5" означает, что вы оценили решение на 5 звезд, чего вы не сделали. :)

Usman Hunjra

Я только что это сделал, сэр .. ;)

Рейтинг:
2

OriginalGriff

Начните с правильного отступа вашего кода или, если вы собираетесь использовать отвратительный 1 ТБ, то, по крайней мере, последовательно:

int main(){
    int i,j;
    for(i=4; i>=1; i--){
        for(j=1; j<=i; j++){
            cout<<" ";
            }
        for(int j=4; j>=i; j--){
            cout<<j;
            }
        for( j=i+1; j<=4; j++){
            cout<<j;
            cout<<'\n';
            }
        for(i=2; i<=4; i++){
            for(j=1; j<i; j++){
                cout<<j;
                }
            for(j=1+i; j<=4; j++){
                cout<<j;
                cout<<'\n';
                }
            }
        
        }
    return 0;
    }
И теперь вы можете видеть, что вы делаете. И первое, что приходит на ум, это следующее: У вас есть две петли, обе изменяющиеся i и один из них находится внутри другого ... поэтому ваш код никогда не завершается.


jeron1

ОГ написал: "1 ТБ"

Я никогда не знаю, как назывался этот формат, я просто съеживаюсь, когда вижу его. Видимо формате я предпочитаю называть Оллман (я никогда не знал, что либо), я отношу это к тому, что я большой вентилятор Оллман Бразерс! ЛОЛ

OriginalGriff

Я согласен - трудно читать, что один.
Я предпочитаю Whitesmiths:

if (a)
   {
   b = c;
   }

jeron1

Неплохо, я никогда не понимал, сколько форматов было классифицировано.

Rick York

Когда-нибудь вам стоит взглянуть на UniversalIndentGUI. Это передний конец для некоторых кодовых "красителей"." Он имеет около десяти различных стилей отступов и довольно легко настраивается. Он не полностью справляется с тем, как мне нравится делать вещи, но это близко.

jeron1

Интересно, спасибо.

Rick York

Я не знаю точно как он называется но я предпочитаю этот:

if( a )
{
    b = c;
}

OriginalGriff

Это Аллман - на мой вкус, это слишком "Паскаль". Я предпочитаю Whitesmiths, потому что он отступает в скобках так же, как и содержание, что более согласуется с одним утверждением.

Rick York

Раньше я так и делал, но потом мне это стало не нравиться. Я думаю, что фигурные скобки должны быть отступлены на том же уровне, что и их "контейнер." Единственное реальное отличие от стиля операции - это положение открывающей скобки. Наверное, это просто другая точка зрения.