Рейтинг:
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[
^]
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
Раньше я так и делал, но потом мне это стало не нравиться. Я думаю, что фигурные скобки должны быть отступлены на том же уровне, что и их "контейнер." Единственное реальное отличие от стиля операции - это положение открывающей скобки. Наверное, это просто другая точка зрения.